美文网首页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