没错,它就是你在app加载数据时不愿意看到的那个玩意
效果图
- 代码有注释,思路很清晰
- ViewController.m
#import "ViewController.h"
@interface ViewController ()
/**要添加图层的view**/
@property (weak, nonatomic) IBOutlet UIView *orangeView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//新建复制图层
CAReplicatorLayer * repLayer = [CAReplicatorLayer layer];
repLayer.frame = _orangeView.bounds;
[_orangeView.layer addSublayer:repLayer];
//新建layer
CALayer * layer = [CALayer layer];
//位置
layer.position = CGPointMake(_orangeView.bounds.size.width / 2, 20);
layer.bounds = CGRectMake(0, 0, 10, 10);
layer.backgroundColor = [UIColor blackColor].CGColor;
//切圆角
layer.cornerRadius = 5;
layer.masksToBounds = YES;
[repLayer addSublayer:layer];
//设置缩放动画
CABasicAnimation * anim = [CABasicAnimation animation];
anim.keyPath = @"transform.scale";
//由1缩放到0
anim.fromValue = @1;
anim.toValue = @0;
anim.repeatDuration = MAXFLOAT;
//动画执行时间
CGFloat duration = 1;
anim.duration = duration;
[layer addAnimation:anim forKey:nil];
//设置子层的形变角度
int count = 20;
CGFloat angle = M_PI * 2 / count;
//设置子层总数
repLayer.instanceCount = count;
//每一个复制层的位置和上一个图层的位置相差 angle
repLayer.instanceTransform = CATransform3DMakeRotation(angle, 0, 0, 1);
//需要保证第一个执行完毕之后,绕一圈回来刚好还是第一个从头开始执行,因此需要把动画时长平均分给每个子层(假设有两个图层,总的动画时间为1秒,延长时间为0.5秒,当第一个执行到0.5秒的时候,第二个就开始执行,第二个执行完刚好1秒。所以公式如下)
//动画延迟时间 = 每个图层的执行时间 / 子层总数
repLayer.instanceDelay = duration / count;
}
@end