美文网首页iOS开发好文iOS Developer - AnimationiOS知识
iOS动画之CAShapeLayer(二)爱奇艺加载动画

iOS动画之CAShapeLayer(二)爱奇艺加载动画

作者: zhanming | 来源:发表于2016-05-30 09:36 被阅读1755次
    QIY.gif
    从今天起demo的代码分OC和Swift两种,以便满足所有同学的需求,但是讲解代码还是OC

    突然发现爱奇艺的视频加载动画可以用CAShapeLayer做出来,之前在提交动画里已经详细介绍过CAShapeLayer用法及其属性,不懂得请看iOS动画之CAShapeLayer(一)提交动画

    任何动画都是一步步完成的,所以以后遇到复杂的动画不要着急,把动画拆分了,就不难了。

    拆分动画

    1. 一个圆慢慢画出来;
    2. 圆慢慢的消失;
    3. 圆消失的同时三角形旋转360度。

    一个圆慢慢画出来

    还记得上个文章里的话吗:理论上,所有描线的动画你都可以用这种方式先指定一个 path 然后改变 strokeEnd, strokeStart 来实现。

    那么一个圆慢慢出来怎么做,首先需要一个path,path其实是个圆

    //画一个圆
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
    
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.fillColor=[UIColor clearColor].CGColor;
    //将路径赋值给CAShapeLayer
    maskLayer.path = path.CGPath;
    //设置路径的颜色
    maskLayer.strokeColor=[UIColor colorWithRed:0.52f green:0.76f blue:0.07f alpha:1.00f].CGColor;
    //设置路径的宽度
    maskLayer.lineWidth=1;
    maskLayer.lineCap=kCALineCapRound;
    
    [self.layer addSublayer:maskLayer];
    

    接下来要开始动画了

    self.maskLayer.strokeStart=0;
    //设置strokeEnd的最终值,动画的fromValue为0,strokeEnd的最终值为0.98
    self.maskLayer.strokeEnd=0.98;
    
    CABasicAnimation *BasicAnimation=[CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    BasicAnimation.fromValue=@(0);
    BasicAnimation.duration=NSTimeInterval;
    BasicAnimation.delegate=self;
    [BasicAnimation setValue:@"BasicAnimationEnd" forKey:@"animationName"];
    [self.maskLayer addAnimation:BasicAnimation forKey:@"BasicAnimationEnd"];
    

    这样完成后一个圆就慢慢出现

    setup1.gif

    圆慢慢的消失

    怎么让一个圆慢慢消失呢,那请问你怎么让一个圆出的?是通过改变strokeEnd从0->0.98
    画圆结束后strokeEnd为0.98
    那么让strokeStart从0->0.98 strokeStart与strokeEnd一样那么圆不就消失了吗

    self.maskLayer.strokeStart=0.98;
    CABasicAnimation *BasicAnimation=[CABasicAnimation animationWithKeyPath:@"strokeStart"];
    BasicAnimation.fromValue=@(0);
    BasicAnimation.duration=NSTimeInterval;
    BasicAnimation.delegate=self;
    [BasicAnimation setValue:@"BasicAnimationStart" forKey:@"animationName"];
    [self.maskLayer addAnimation:BasicAnimation forKey:@"BasicAnimationStart"];
    
    setup2.gif

    代码和画圆差不多,就不多解释了

    圆消失的同时三角形旋转360度

    //开始三角形旋转

        CABasicAnimation *BasicAnimation=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        BasicAnimation.toValue=@(M_PI*2);
        BasicAnimation.duration=NSTimeInterval;
        BasicAnimation.delegate=self;
        [BasicAnimation setValue:@"BasicAnimationRotation" forKey:@"animationName"];
        [self.centerImage.layer addAnimation:BasicAnimation forKey:@"BasicAnimationRotation"];
    

    最基本的CABasicAnimation真的不需要多解释了
    如果感觉这篇文章对您有所帮助,顺手点个喜欢,谢谢啦
    代码放在了GitHub上大家可以下载。

    相关文章

      网友评论

      • 陆宝宝:您好,先给您点个赞。我现在想实现,只转一圈的需求,该怎么控制呢
      • 李国安: :+1: :+1: :+1: 喜欢你的 CAShapeLayer 文章
      • GloryMan:已经解决了 :smile:
        46333313b82d:@GloryMan :+1:
        GloryMan:@田小四 https://github.com/xinxibin/CoreAnimation-Animations- 这里有我写的 demo
        46333313b82d:如何解决的?:heavy_exclamation_mark:
      • GloryMan:不知道 楼主 发现没 循环开始之后 初始的位置 总是 不太对 我是处女座 希望楼主 看看 怎么改进下 不胜感激
      • zhanming:sorry,已改正,谢谢
      • 一铭_:github 链接地址错了,把后面文字包进来了

      本文标题:iOS动画之CAShapeLayer(二)爱奇艺加载动画

      本文链接:https://www.haomeiwen.com/subject/yiqfdttx.html