美文网首页iOS开发知识
CABasicAnimation学习笔记

CABasicAnimation学习笔记

作者: 太阳骑士索拉尔 | 来源:发表于2019-05-24 17:00 被阅读0次

    前言

    • 本来是想把动画好好学一学的,结果发现连最开始的CABasicAnimation好多属性都非常的诡异,所以还是慢慢来吧
    • 2A82BC20-FFB6-434F-9175-86BDD52F7460
    • 18375D47-DB92-4800-AAF4-7567C467EABF

    Demo

    GitHub地址

    介绍

    • 模仿薄荷健康添加食物的动画,通过简单的CABasicAnimation以及延时动画实现
    • 薄荷: RPReplay_Final1558009741
    • Demo效果: 仿薄荷

    好多坑

    repeatCount与repeatDuration

    /* The repeat count of the object. May be fractional. Defaults to 0. */
    
    @property float repeatCount;
    
    /* The repeat duration of the object. Defaults to 0. */
    
    @property CFTimeInterval repeatDuration;
    
    //重复执行次数
    @property float repeatCount;
    //重复执行时间,此属性优先级大于repeatCount.也就是说如果repeatDuration设置为1秒重复10次,那么它会在1秒内执行完动画.
    @property CFTimeInterval repeatDuration;
    

    removedOnCompletion与fillMode

    /* When true, the animation is removed from the render tree once its
     * active duration has passed. Defaults to YES. */
    
    @property(getter=isRemovedOnCompletion) BOOL removedOnCompletion;
    
    • 如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。
    • RemovedOnCompletion | 这个属性默认为 YES,在指定的时间段完成后,动画就自动的从层上移除了。
      FillMode | 这个属性一般和 RemovedOnCompletion 配合使用,保持动画状态。其中kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态.此时将RemovedOnCompletion设为NO
    • //动画的填充方式,默认为: kCAFillModeRemoved,包含以下值
      //kCAFillModeForwards//动画结束后回到准备状态
      //kCAFillModeBackwards//动画结束后保持最后状态
      //kCAFillModeBoth//动画结束后回到准备状态,并保持最后状态
      //kCAFillModeRemoved//执行完成移除动画

    timingFunction

    //动画的动作规则,包含以下值
    //kCAMediaTimingFunctionLinear 匀速
    //kCAMediaTimingFunctionEaseIn 慢进快出
    //kCAMediaTimingFunctionEaseOut 快进慢出
    //kCAMediaTimingFunctionEaseInEaseOut 慢进慢出 中间加速
    //kCAMediaTimingFunctionDefault 默认
    @property(nullable, strong) CAMediaTimingFunction *timingFunction;
    

    duration与speed

    //动画执行时间,此属性和speed有关系speed默认为1.0,如果speed设置为2.0,那么动画执行时间则为duration*(1.0/2.0).
    @property CFTimeInterval duration;
    //动画执行速度,它duration的关系参考上面解释
    @property float speed;
    //这是一个非常有意思的时间相关的属性。如果把动画的duration设置为3秒,而speed设置为2,动画将会在1.5秒结束,因为它以两倍速在执行。
    

    beginTime

    /* The begin time of the object, in relation to its parent object, if
     * applicable. Defaults to 0. */
    
    @property CFTimeInterval beginTime;
    
    BEGINTIME:刚才上面简单解释了下这个属性的用法:CACurrentMediaTime()+ x。会使动画延迟执行点¯x秒不知道到这里有没有人想过如果-x?会出现怎么样效果假设我们有执行一个3秒的动画,设置然后beginTime = CACurrentMediaTime()- 1.5那么执行动画你会发现动画只会执行后半段,就是也。只执行后面的3-1.5s的动画。为什么会这样?其实动画都有一个时间表(时间线)的概念。动画开始执行都是基于这个时间线的绝对时间,这个时间和它的父类有关(系统的属性注释可以看到)。默认的CALayer的的BEGINTIME为零,如果这个值为零的话,系统会把它设置为CACurrentMediaTime(),那么这个时间就是正常执行动画的时间:立即执行所以如果设置你beginTime=CACurrentMediaTime()+x;它会把它的执行时间线推迟x秒,就是也。晚执行x秒,如果你beginTime=CACurrentMediaTime()-x;那它开始的时候会从你动画对应的绝对时间开始执行。
    

    animationWithKeyPath

    D1362986-CF67-4C59-BB2E-0EA409C81F99

    参考文章

    相关文章

      网友评论

        本文标题:CABasicAnimation学习笔记

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