iOS 拆分一个爱奇艺动画

animation.gif

拆分动画,除了系统的preview动画,推荐一个视频转动画的软件:Gif brewery,通过brewery我们可以一帧一帧的画面,帮助理解动画效果。

这个动画可以分为两个步骤:
1、stroke end > stroke start (渐渐显示3/4个圆弧)也就是说stroke start走到1/4,同时stroke end 绘制完一圈。
2、stroke end 等待 stroke start(圆弧渐渐消失),起点不原地不动,等待终点追赶。

中间的圆弧的是这样的,通过系统的preview动画可以看到:


QQ20171204-154550.png

思路就是把时间分割,然后装进动画组里:

- (void)loadingAnimation {
    CABasicAnimation *beginStart = [CABasicAnimation animationWithKeyPath:@"strokeStart"];
    beginStart.fromValue         = @0;
    beginStart.toValue           = @.25;
    beginStart.timingFunction    = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    beginStart.duration = self.animationDuration * 2 / 3.0;
    
    CABasicAnimation *beginEnd   = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    beginEnd.fromValue           = @0;
    beginEnd.toValue             = @1.;
    beginEnd.duration            = self.animationDuration * 2 / 3.0;
    
    上面的部分生成3/4个圆弧。

    //剩下的时间用来等待
    CABasicAnimation *endStart = [CABasicAnimation animation];
    endStart.keyPath = @"strokeStart";
    endStart.beginTime = self.animationDuration * 2 / 3.0;
    endStart.duration = self.animationDuration / 3.0;
    endStart.fromValue = @(0.25f);
    endStart.toValue = @(1.f);
    endStart.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
    CABasicAnimation *endend = [CABasicAnimation animation];
    endend.keyPath = @"strokeEnd";
    endend.beginTime = self.animationDuration * 2 / 3.0;
    endend.duration =  self.animationDuration / 3.0;
    endend.fromValue = @(1.f);
    endend.toValue = @(1.f);
    endend.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
    
    CAAnimationGroup *strokeAniamtionGroup   = [CAAnimationGroup animation];
    strokeAniamtionGroup.duration            = self.animationDuration;
    strokeAniamtionGroup.animations          = @[beginStart,beginEnd,endStart,endend];
    
    strokeAniamtionGroup.removedOnCompletion = NO;
    strokeAniamtionGroup.fillMode            = kCAFillModeForwards;
    strokeAniamtionGroup.repeatCount = INTMAX_MAX;
    [self.loadingLayer addAnimation:strokeAniamtionGroup forKey:@"strokeAniamtionGroup"];
}

demo地址:加载动画

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,720评论 6 30
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,324评论 4 61
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,533评论 5 13
  • 100天写作计划 第13天文/于水水小玩子 你有没有在面试的时候被问到过—— “能和我们说说你有什么缺点吗?” 你...
    于水水小玩子阅读 4,332评论 3 14