美文网首页iOS开发之笔记摘录
CALayer的常用子类之笔记摘录

CALayer的常用子类之笔记摘录

作者: 平安喜乐698 | 来源:发表于2020-03-17 17:57 被阅读0次
目录
  1. CAReplicatorLayer 复制动画
  2. CAShapeLayer 路径动画

从个人笔记中摘录而来。时间间隔长了点,可能有部分失误。谨作为个人网上笔记。
不适合他人阅读。

前言


1. CAReplicatorLayer 复制动画

CAReplicatorLayer:一个用于动画的Layer容器,存放若干份复制的子Layer。

  1. 属性

配置子Layer的:复制个数、延迟时间、形变、颜色、透明度等

CAReplicatorLayer : CALayer  

    // 是否开启景深
    @property BOOL preservesDepth;

    // 要拷贝的个数(默认为1)
    @property NSInteger instanceCount;

    // 间隔时间(延迟时间)
    @property CFTimeInterval instanceDelay;

    // 背景色,如果设置了backgroundColor则此属性失效
    @property(nullable) CGColorRef instanceColor;

    // 形变
    @property CATransform3D instanceTransform;

    // 颜色偏移(为负则递减)
    @property float instanceRedOffset;
    @property float instanceGreenOffset;
    @property float instanceBlueOffset;

    // 透明度偏移(为负则递减)
    @property float instanceAlphaOffset;
  1. 使用
运行效果

第一步:创建CAReplicatorLayer对象(负责配置)

    CAReplicatorLayer *replicatorLayer = [CAReplicatorLayer layer];
    [replicatorLayer setInstanceCount:8];
    [replicatorLayer setInstanceTransform:CATransform3DMakeTranslation(50, 0, 0)];
    [replicatorLayer setInstanceDelay:0.15];
    [replicatorLayer setInstanceColor:[UIColor blueColor].CGColor];
    [replicatorLayer setInstanceAlphaOffset:-0.1];

第二步:创建一个图层对象(子Layer)

    CALayer *layer=[CALayer layer]; // 这里可以是某个View的layer
    [layer setBounds:CGRectMake(0, 0, 20, 100)];    // 大小
    [layer setBackgroundColor:[UIColor greenColor].CGColor];    // 会和replicatorLayer的InstanceColor混合
    [layer setPosition:CGPointMake(50, 300)];   // 第一个子layer的位置
    [layer setAnchorPoint:CGPointMake(0, 1)];   // 锚点

第三步:创建一个基本动画(子Layer设置Animation)

    CABasicAnimation *scaleAnimation=[CABasicAnimation animation];
    [scaleAnimation setRepeatCount:MAXFLOAT];
    [scaleAnimation setKeyPath:@"transform.scale.y"];
    [scaleAnimation setToValue:@(0.1)];
    [scaleAnimation setDuration:0.5];
    [scaleAnimation setAutoreverses:true];  // 形变完成后动画返回原状态
    [layer addAnimation:scaleAnimation forKey:@"hello"];

第四步:子Layer添加到CAReplicatorLayer中

    [replicatorLayer addSublayer:layer];
    [self.view.layer addSublayer:replicatorLayer];

2. CAShapeLayer 路径动画

需要配合贝塞尔曲线(提供路径/形状)

  1. 属性
CAShapeLayer : CALayer

     // 路径(用于渲染)(必填)
     @property(nullable) CGPathRef path;

     // 填充色(默认:黑色)
     @property(nullable) CGColorRef fillColor;
     // kCAFillRuleNonZero(默认)、kCAFillRuleEvenOdd
     @property(copy) CAShapeLayerFillRule fillRule;

     // 边框色(默认:nil)
     @property(nullable) CGColorRef strokeColor;
     // 边框线宽(默认:1)
     @property CGFloat lineWidth;
     // 线两端(kCALineCapButt(默认)、kCALineCapRound、kCALineCapSquare)
     @property(copy) CAShapeLayerLineCap lineCap;
     // 线连接处(kCALineJoinMiter(默认)、kCALineJoinRound、kCALineJoinBevel)
     @property(copy) CAShapeLayerLineJoin lineJoin;
     //  边框线的起始、结束位置[0,1]
     @property CGFloat strokeStart; // 默认:0
     @property CGFloat strokeEnd;   // 默认:1
     
     // 默认:nil
     @property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;
     // 默认:0
     @property CGFloat lineDashPhase;
     // 斜接,默认:10
     @property CGFloat miterLimit;
  1. 使用

第一步:创建UIBezierPath

    CGPoint startPoint=CGPointMake(0, 300);
    CGPoint endPoint=CGPointMake(300, 300);
    CGPoint controlPoint1=CGPointMake(50, 40);
    CGPoint controlPoint2=CGPointMake(100, 500);
    UIBezierPath *path=[UIBezierPath new];
    [path moveToPoint:startPoint];
    [path addCurveToPoint:endPoint controlPoint1:controlPoint1 controlPoint2:controlPoint2];
    [path addLineToPoint:controlPoint2];

第二步:创建CAShapeLayer(设置path,并添加到父Layer中)

    CAShapeLayer *progressLineLayer=[CAShapeLayer layer];
    [progressLineLayer setPath:path.CGPath];
    [progressLineLayer setStrokeColor:[UIColor orangeColor].CGColor];
    [progressLineLayer setFillColor:[UIColor redColor].CGColor];
    [progressLineLayer setLineWidth:5.0];
    [progressLineLayer setLineCap:kCALineCapRound];     //
    [progressLineLayer setLineJoin:kCALineJoinRound];   //
    [progressLineLayer setStrokeStart:0.2];
    [self.view.layer addSublayer:progressLineLayer];
运行效果

相关文章

网友评论

    本文标题:CALayer的常用子类之笔记摘录

    本文链接:https://www.haomeiwen.com/subject/ufgbehtx.html