十四 iOS之 活动指示器

没错,它就是你在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值