目錄 1、CALayer(父類) 2、CAShapeLayer(形狀/畫布) 3、CAGradientLayer(漸變層) 順序為 接觸/學習 順序 1、CALayer(父類) 1-1)、幾個常用屬性 2、CAShapeLayer 2-1)、使用參照 《iOS:繪圖》 -> “1、UIBezierP ...
目錄
1、CALayer(父類)
2、CAShapeLayer(形狀/畫布)
3、CAEmitterLayer(粒子發射層)
4、CAGradientLayer(漸變層)
順序為 接觸/學習 順序
1、CALayer(父類)
1-1)、幾個常用屬性
CALayer *layer = [[CALayer alloc]init]; // 一般layer尺寸設置,為 bounds = {0, 0, width, height}; position = {centerX, centery};frame 為虛擬、計算出來的。 layer.bounds // 錨點的位置,預設中心,等同於View的center。如果錨點 anchorPoint 有修改過,比如anchorPoint = {0,0} ,則position = {x, y}; layer.position // 錨點,旋轉、位置相關,預設(0.5, 0.5)。範圍(0, 0) <-> (1, 1) layer.anchorPoint // 內容顯示方式,對齊、自適應、不超出邊界、拉伸 layer.contentsGravity // 設置某個區域會被拉伸變化,大小均為0至1,{0.25, 0.25, 0.5, 0.5} layer.contentsCenter //變換 layer.transform //圓角、邊框、透明、陰影相關 layer.masksToBounds layer.cornerRadius layer.borderWidth layer.borderColor layer.opacity layer.shadowColor layer.shadowOpacity layer.shadowOffset layer.shadowRadius layer.shadowPath // Z軸,透視效果。3D變換,如旋轉會很明顯 layer.zPosition layer.anchorPointZ // 同View layer.frame layer.hidden layer.superlayer layer.sublayers layer.backgroundColor
1-2)、幾個方法
// 子類重寫,設置預設屬性 + (nullable id)defaultValueForKey:(NSString *)key { if ([key isEqualToString:@"backgroundColor"]) { return (id)[UIColor orangeColor].CGColor; } return [super defaultValueForKey:key]; } // 添加動畫 - (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key; // 層級結構,同View - (void)removeFromSuperlayer; - (void)addSublayer:(CALayer *)layer; - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx; - (void)insertSublayer:(CALayer *)layer below:(nullable CALayer *)sibling; - (void)insertSublayer:(CALayer *)layer above:(nullable CALayer *)sibling; - (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2; // - (void)display; - (void)setNeedsDisplay; - (void)setNeedsDisplayInRect:(CGRect)r; - (BOOL)needsDisplay; - (void)displayIfNeeded; // - (void)setNeedsLayout; - (BOOL)needsLayout; - (void)layoutIfNeeded; - (void)layoutSublayers;
2、CAShapeLayer
2-1)、使用參照 《iOS:繪圖》 -> “1、UIBezierPath(貝塞爾曲線)” -> “1-2)、” 。
3、CAEmitterLayer(粒子發射層)
3-1)、使用參照 《iOS:動畫》 -> “N、粒子動畫” -> “N-1)、創建粒子發射層” 。
4、CAGradientLayer(漸變層)
4-1)、透明度(示例)
//創建 CAGradientLayer *gradientLayer = [CAGradientLayer layer]; //漸變點 UIColor *colorTop = [[UIColor alloc]initWithRed:0.0 green:0.0 blue:0.0 alpha:1]; UIColor *colorButtom = [[UIColor alloc]initWithRed:0.0 green:0.0 blue:0.0 alpha:0]; gradientLayer.colors = @[ (__bridge id)colorTop.CGColor, (__bridge id)colorButtom.CGColor]; // 漸變點位置(個數對應colors個數,沒對應也沒事,只是有點奇怪),點與點的距離越小,變化越快 // gradientLayer.locations = @[@0.0,@1.0]; // 變化類型,線性變化(只有這個巨集,不設也沒事) // gradientLayer.type = kCAGradientLayerAxial; //漸變方向 x:0->1 左到右,反之則反。同理,y:0->1 上到下,反之則反。(0.0)->(1.1)屏幕左上到右下斜著變化 gradientLayer.startPoint = CGPointMake(0, 0); gradientLayer.endPoint = CGPointMake(0, 1.0); //大小,如果小於bounds,應該還要設置 position 。 gradientLayer.frame = self.bounds; //添加 [self.layer addSublayer:gradientLayer];