為了動畫和特效皱卓,CALayer屬性和使用的介紹是必不可少的裹芝。
一、CALayer的常用屬性
1娜汁、@propertyCGPoint position;
圖層中心點(diǎn)的位置嫂易,類似與UIView的center;用來設(shè)置CALayer在父層中的位置掐禁;以父層的左上角為原點(diǎn)(0怜械,0)2、 @property CGPoint anchorPoint;
稱『定位點(diǎn)』穆桂、『錨點(diǎn)』宫盔,該描述是相對于x、y位置比例而言的默認(rèn)在圖像中心點(diǎn)(0.5享完、0.5)的位置;決定著CALayer身上的哪個(gè)點(diǎn)會再position屬性所指的位置有额,以自己的左上角為原點(diǎn)(0般又,0)彼绷;它的x、y取值范圍都是0~13茴迁、 @property(nullable) CGColorRef backgroundColor
圖層背景顏色4寄悯、 @property(nullable) CGColorRef borderColor
圖層邊框顏色5、 @property CGFloat borderWidth
圖層邊框?qū)挾?/p>6堕义、 @property CGRect bounds
圖層大小7猜旬、 @property(nullable, strong) id contents
圖層顯示內(nèi)容,例如可以將圖片作為圖層內(nèi)容顯示8倦卖、 @property CGRect contentsRect
圖層顯示內(nèi)容的大小和位置9洒擦、 @property CGFloat cornerRadius
圓角半徑10、 @property(getter=isDoubleSided) BOOL doubleSided
圖層背景是否顯示怕膛,默認(rèn)是YES11熟嫩、 @property CGRect frame
圖層大小和位置,不支持隱式動畫褐捻,所以CALyaer中很少使用frame掸茅,通常使用bound和position代替12、 @property(getter=isHidden) BOOL hidden
是否隱藏13柠逞、 @property(nullable, strong) CALayer *mask
圖層蒙版14昧狮、 @property BOOL masksToBounds
子圖層是否剪切圖層邊界,默認(rèn)是NO15板壮、 @property float opacit;
圖層透明度逗鸣,類似與UIView的alpha16、 @property(nullable) CGColorRef shadowColor
陰影顏色17个束、 @property CGSize shadowOffset
陰影偏移量18慕购、 @property float shadowOpacity
陰影透明度,注意默認(rèn)為0茬底,如果設(shè)置陰影必須設(shè)置此屬性19沪悲、 @property(nullable) CGPathRef shadowPath
陰影形狀20、 @property CGFloat shadowRadius
陰影模糊半徑21阱表、 @property(nullable, copy) NSArray
二殿如、CALayer不常用屬性
1、 @property CGFloat zPosition
圖層中心點(diǎn)在z軸中的位置2最爬、 @property CGFloat anchorPointZ
圖層在z軸中的錨點(diǎn)涉馁;3、 - (CGAffineTransform)affineTransform
4爱致、- (void)setAffineTransform:(CGAffineTransform)m
以上屬性為圖層形變烤送;該屬性值指定一個(gè)CGAffineTransform對象,該對象代表對CALayer執(zhí)行X糠悯、Y兩個(gè)維度(也就是平面)上的旋轉(zhuǎn)帮坚、縮放妻往、位移、斜切试和、鏡像等變換矩陣5讯泣、 @property(nullable, readonly) CALayer *superlayer
圖層的父圖層
三、CALayer圖層操作
1阅悍、 - (void)addSublayer:(CALayer *)layer
添加子圖層2好渠、 - (void)removeFromSuperlayer
將自己從父圖層中移除3、 - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx
在自己子圖層數(shù)組中的第idx位置添加圖層4节视、 - (void)insertSublayer:(CALayer )layer below:(nullable CALayer )sibling
將圖層layer添加在子圖層sibling的下面5拳锚、 - (void)insertSublayer:(CALayer )layer above:(nullable CALayer )sibling
將圖層layer添加在子圖層sibling的上面6、 - (void)replaceSublayer:(CALayer )layer with:(CALayer )layer2
將圖層layer替換layer2肴茄;
四晌畅、CALayer動畫操作
1、 - (void)addAnimation:(CAAnimation )anim forKey:(nullable NSString )key
圖層添加某一屬性的動畫2寡痰、 - (nullable NSArray< NSString > )animationKeys
獲取所有動畫的屬性3抗楔、 - (nullable CAAnimation )animationForKey:(NSString )key
獲取某一屬性的動畫4、 - (void)removeAnimationForKey:(NSString *)key
移除某一屬性動畫5拦坠、 - (void)removeAllAnimations
移除所有動畫
五连躏、CALayer子類其他說明
子類名稱 | 用途 |
---|---|
CAEmitterLayer | 發(fā)射器層,用來控制粒子效果 |
CAGradientLayer | 梯度層贞滨,顏色漸變 |
CAEAGLayer | 用OpenGL ES繪制的層 |
CAReplicationLayer | 用來自動復(fù)制sublayer |
CAShapeLayer | 繪制立體的貝塞爾曲線 |
CAScrollLayer | 用來管理可滑動的區(qū)域 |
CATextLayer | 可以繪制AttributeString |
CATiledLayer | 用來管理一副可以被分割的大圖 |
CATransformLayer | 用來渲染3D layer的層次結(jié)構(gòu) |
1. CAShapeLayer
CAShapeLayer屬于QuartzCore框架入热,繼承自CALayer。CAShapeLayer是在坐標(biāo)系內(nèi)繪制貝塞爾曲線的晓铆,通過繪制貝塞爾曲線勺良,設(shè)置shape(形狀)的path(路徑),從而繪制各種各樣的圖形以及不規(guī)則圖形骄噪。因此尚困,使用CAShapeLayer需要與UIBezierPath一起使用。
UIBezierPath類允許你在自定義的 View 中繪制和渲染由直線和曲線組成的路徑.链蕊。你可以在初始化的時(shí)候直接為你的UIBezierPath指定一個(gè)幾何圖形事甜。
通俗點(diǎn)就是UIBezierPath用來指定繪制圖形路徑,而CAShapeLayer就是根據(jù)路徑來繪圖的滔韵。
屬性
1逻谦、@property(nullable) CGPathRef path; 呈現(xiàn)的形狀的路徑
2、@property(nullable) CGColorRef fillColor;填充路徑的顏色
3陪蜻、@property(copy) CAShapeLayerFillRule fillRule; 當(dāng)在填充顏色的時(shí)候則就需要這種填充規(guī)則邦马,值有兩種,非零和奇偶數(shù),但默認(rèn)是非零值勇婴。
4忱嘹、@property(nullable) CGColorRef strokeColor;設(shè)置描邊色嘱腥,默認(rèn)無色耕渴。
5、@property CGFloat strokeStart; 繪制邊線輪廓路徑的子區(qū)域齿兔。該值必須在[0,1]范圍橱脸,0代表路徑的開始,1代表路徑的結(jié)束分苇。 默認(rèn)為0
6添诉、@property CGFloat strokeEnd; 默認(rèn)為1
7、@property CGFloat lineWidth; 線的寬度 默認(rèn)為1
8医寿、@property CGFloat miterLimit;最大斜接長度栏赴。斜接長度指的是在兩條線交匯處和外交之間的距離。只有l(wèi)ineJoin屬性為kCALineJoinMiter時(shí)miterLimit才有效靖秩。邊角的角度越小须眷,斜接長度就會越大。為了避免斜接長度過長沟突,我們可以使用miterLimit屬性花颗。如果斜接長度超過miterLimit的值,邊角會以lineJoin的“bevel”即kCALineJoinBevel類型來顯示惠拭。
9扩劝、@property(copy) CAShapeLayerLineCap lineCap; 線端點(diǎn)類型,值有三個(gè)類型职辅,分別為kCALineCapButt 棒呛、kCALineCapRound 、kCALineCapSquare域携,默認(rèn)值為Butt簇秒;
10、@property(copy) CAShapeLayerLineJoin lineJoin;lineJoin為線連接類型涵亏,其值也有三個(gè)類型宰睡,分別為kCALineJoinMiter、kCALineJoinRound气筋、kCALineJoinBevel拆内,默認(rèn)值是Miter。
11宠默、@property CGFloat lineDashPhase;為線型模版的起始位置麸恍;lineDashPattern為線性模版,這是一個(gè)NSNumber的數(shù)組,索引從1開始記抹沪,奇數(shù)位數(shù)值表示實(shí)線長度刻肄,偶數(shù)位數(shù)值表示空白長度。
注:fillColor與strokeColor都是在有UIBezierPath參數(shù)配置的情況下才能發(fā)生作用12融欧、@property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;
2.CAReplicationLayer
屬性
1敏弃、@property NSInteger instanceCount; 復(fù)制subLayer個(gè)數(shù),默認(rèn)為1
2噪馏、@property BOOL preservesDepth; 是否將3D例子系統(tǒng)平面化到一個(gè)圖層(默認(rèn)值)或者可以在3D空間中混合其他的圖層
3麦到、@property CFTimeInterval instanceDelay; 設(shè)置復(fù)制子層的延遲動畫時(shí)長
4、@property CATransform3D instanceTransform; 設(shè)置復(fù)制子層的相對位置
5欠肾、@property(nullable) CGColorRef instanceColor; 子層顏色瓶颠,會和原生子層背景色沖突,因此二者選其一設(shè)置
6刺桃、@property float instanceRedOffset;
設(shè)置每個(gè)復(fù)制圖層相對上一個(gè)復(fù)制圖層的紅色偏移量7粹淋、@property float instanceRedOffset;
設(shè)置每個(gè)復(fù)制圖層相對上一個(gè)復(fù)制圖層的綠色偏移量8、@property float instanceBlueOffset;設(shè)置每個(gè)復(fù)制圖層相對上一個(gè)復(fù)制圖層的藍(lán)色偏移量
9瑟慈、@property float instanceAlphaOffset;設(shè)置每個(gè)復(fù)制圖層相對上一個(gè)復(fù)制圖層的透明度偏移量