您的当前位置:首页CAReplicatorLayer 动画

CAReplicatorLayer 动画

2024-12-13 来源:哗拓教育

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);

显示全文