iOS关于CAReplicatorLayer(多图层复制)动画

作者 : 开心源码 本文共2372个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共147人阅读

分别写了关于指示器动画,圆形加载动画。效果如图:

[图片上传中…(One Point Scale动画.gif-80399d-1535716681149-0)]
One Point Scale动画.gif

  • 第一个动画代码如下
- (void)addLayer {    //初始化增加复制图层    replicatorLayer = [CAReplicatorLayer layer];    replicatorLayer.bounds = CGRectMake(100, 100, 300, 300);    replicatorLayer.position = self.view.center;    replicatorLayer.backgroundColor = [UIColor clearColor].CGColor;    [self.view.layer addSublayer:replicatorLayer];    [self addActivityLayer];}- (void)addActivityLayer {    activityLayer = [CAShapeLayer layer];    //用贝塞尔曲线绘制矩形路径    UIBezierPath *path = [UIBezierPath bezierPath];    [path moveToPoint:CGPointMake(self.view.center.x, self.view.center.y/2)];    [path addLineToPoint:CGPointMake(self.view.center.x + 20, self.view.center.y/2)];    [path addLineToPoint:CGPointMake(self.view.center.x + 10, self.view.center.y/2 + 20)];    [path addLineToPoint:CGPointMake(self.view.center.x - 10 , self.view.center.y/2 + 20)];    [path closePath];    activityLayer.fillColor = [UIColor whiteColor].CGColor;    activityLayer.path = path.CGPath;    //设置图层不可见    activityLayer.transform = CATransform3DMakeScale(0.01, 0.01, 0.01);        [replicatorLayer addSublayer:activityLayer];        //复制的图层数为三个    replicatorLayer.instanceCount = 3;    //设置每个复制图层推迟时间    replicatorLayer.instanceDelay = 1.f / 3.f;    //设置每个图层之间的偏移    replicatorLayer.instanceTransform = CATransform3DMakeTranslation(35, 0, 0);}- (CABasicAnimation *)alphaAnimation{    //设置透明度动画    CABasicAnimation *alpha = [CABasicAnimation animationWithKeyPath:@"opacity"];    alpha.fromValue = @1.0;    alpha.toValue = @0.01;    alpha.duration = 1.f;    return alpha;}- (CABasicAnimation *)activityScaleAnimation{    //设置缩放动画    CABasicAnimation *scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"];    scale.toValue = @1;    scale.fromValue = @1;    return scale;}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {    //设置动画组,并执行动画    CAAnimationGroup *group = [CAAnimationGroup animation];    group.animations = @[[self alphaAnimation],[self activityScaleAnimation]];    group.duration = 1.f;    group.repeatCount = HUGE;    [activityLayer addAnimation:group forKey:@""];}
  • 第二个动画就很有趣了,由于可以这样子玩。
    • 四个点的时候:

      Four Point Scale动画.gif

    • 三个点的时候是这样滴:

      Three Point Scale动画.gif

    • 一个点的时候又是这样子的:

是不是觉得很不可思议?怎样能这么玩呢?

起因还是跟复制图层的属性设置有关。

划重点来了

//    replicatorLayer.instanceDelay = 4.f/ 15.f;//    replicatorLayer.instanceDelay = 3.f/ 15.f;    replicatorLayer.instanceDelay = 1.f/ 15.f;

就是这个属性导致这个圆形加载动画可以这样子玩的起因。


那这个 instanceDelay属性又是什么呢?

  • 在短时间内的复制延时,一般使用在动画上(支持动画的延时)

也就是说一旦复制图层的时间控制得有点不一样,都会有很多意想不到的效果。


好了,假如有关于这个图层动画还有想深入理解的,可以关注我。后续我将为大家奉上更多实战内容。由于理论的内容在网上有很多,但实战的内容还是比较少的。所以大家应该还是比较期待的。

这个是上面demo的链接: xiaojin1123/CAReplicatorLayer-

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS关于CAReplicatorLayer(多图层复制)动画

发表回复