CAReplicatorLayer 动画

CAReplicatorLayer是一个容器层,添加到 容器上的 layer 可以复制 若干份。可以预先设定复制多少份、设定副本之间的距离,透明度或颜色。然后添加动画,形成比较炫的加载动画。需要设置三个元素,CAReplicatorLayerCALayerCABasicAnimation

1.初始化CAReplicatorLayer

_replicatorLayer = [[CAReplicatorLayer alloc] init];

_replicatorLayer.frame = CGRectMake(50, 100, 200, 200);

_replicatorLayer.backgroundColor = [UIColor lightGrayColor].CGColor;

[self.view.layer addSublayer:_replicatorLayer];

2.初始化CALayer

_layer = [[CALayer alloc] init];

_layer.bounds = CGRectMake(0, 0, 14, 14);

_layer.position = CGPointMake(100, 40);

_layer.backgroundColor = [UIColor whiteColor].CGColor;

_layer.borderColor = [UIColor redColor].CGColor;

_layer.borderWidth = 0.5;

3.添加到CAReplicatorLayer上

// 只有 加在 replicator layer 上的 layer 可以复制

[_replicatorLayer addSublayer:_layer];

4.设置重复次数 以及初始化复制的layer的样式

//设置重复次数以及初始位置

NSInteger number = 10;//复制的个数

CGFloat angle = 2.0*M_PI /number;

_replicatorLayer.instanceCount = number;

_replicatorLayer.instanceTransform = CATransform3DMakeRotation(angle, 0, 0, 1);

5.开始动画。可以写一个按钮的事件

CABasicAnimation * basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

basicAnimation.fromValue = @(1.0);

basicAnimation.toValue = @(0.1);

basicAnimation.duration = 0.8;

basicAnimation.repeatCount = INFINITY;

[_layer addAnimation:basicAnimation forKey:nil];

//  注释掉所有layer将同时运动

_replicatorLayer.instanceDelay = 0.8 / 10;

//修复第一次动画的bug

_layer.transform = CATransform3DMakeTranslation(0.03, 0.03, 0.03);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容