
為了動(dòng)畫和特效,CALayer屬性和使用的介紹是必不可少的。
一、CALayer的常用屬性
1、@propertyCGPoint position;
圖層中心點(diǎn)的位置,類似與UIView的center;用來設(shè)置CALayer在父層中的位置;以父層的左上角為原點(diǎn)(0,0)2、 @property CGPoint anchorPoint;
稱『定位點(diǎn)』、『錨點(diǎn)』,該描述是相對(duì)于x、y位置比例而言的默認(rèn)在圖像中心點(diǎn)(0.5、0.5)的位置;決定著CALayer身上的哪個(gè)點(diǎn)會(huì)再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
圖層大小和位置,不支持隱式動(dòng)畫,所以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對(duì)象,該對(duì)象代表對(duì)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動(dòng)畫操作
1、 - (void)addAnimation:(CAAnimation )anim forKey:(nullable NSString )key
圖層添加某一屬性的動(dòng)畫2、 - (nullable NSArray< NSString > )animationKeys
獲取所有動(dòng)畫的屬性3、 - (nullable CAAnimation )animationForKey:(NSString )key
獲取某一屬性的動(dòng)畫4、 - (void)removeAnimationForKey:(NSString *)key
移除某一屬性動(dòng)畫5、 - (void)removeAllAnimations
移除所有動(dòng)畫
五、CALayer子類其他說明
| 子類名稱 | 用途 |
|---|---|
| CAEmitterLayer | 發(fā)射器層,用來控制粒子效果 |
| CAGradientLayer | 梯度層,顏色漸變 |
| CAEAGLayer | 用OpenGL ES繪制的層 |
| CAReplicationLayer | 用來自動(dòng)復(fù)制sublayer |
| CAShapeLayer | 繪制立體的貝塞爾曲線 |
| CAScrollLayer | 用來管理可滑動(dòng)的區(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;最大斜接長(zhǎng)度。斜接長(zhǎng)度指的是在兩條線交匯處和外交之間的距離。只有l(wèi)ineJoin屬性為kCALineJoinMiter時(shí)miterLimit才有效。邊角的角度越小,斜接長(zhǎng)度就會(huì)越大。為了避免斜接長(zhǎng)度過長(zhǎng),我們可以使用miterLimit屬性。如果斜接長(zhǎng)度超過miterLimit的值,邊角會(huì)以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í)線長(zhǎng)度,偶數(shù)位數(shù)值表示空白長(zhǎng)度。
注: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ù)制子層的延遲動(dòng)畫時(shí)長(zhǎng)
4、@property CATransform3D instanceTransform; 設(shè)置復(fù)制子層的相對(duì)位置
5、@property(nullable) CGColorRef instanceColor; 子層顏色,會(huì)和原生子層背景色沖突,因此二者選其一設(shè)置
6、@property float instanceRedOffset;
設(shè)置每個(gè)復(fù)制圖層相對(duì)上一個(gè)復(fù)制圖層的紅色偏移量7、@property float instanceRedOffset;
設(shè)置每個(gè)復(fù)制圖層相對(duì)上一個(gè)復(fù)制圖層的綠色偏移量8、@property float instanceBlueOffset;設(shè)置每個(gè)復(fù)制圖層相對(duì)上一個(gè)復(fù)制圖層的藍(lán)色偏移量
9、@property float instanceAlphaOffset;設(shè)置每個(gè)復(fù)制圖層相對(duì)上一個(gè)復(fù)制圖層的透明度偏移量