美文网首页
动画相关的知识总结

动画相关的知识总结

作者: tonytong | 来源:发表于2017-10-26 19:42 被阅读0次

    一、基础知识


    核心动画关系图谱

    二、CABasicAnimation

    1.动画的属性和解释
    属性 解释
    duration 设置动画执行时间
    repeatCount 设置动画重复次数
    repeatDuration 重复的时间段
    beginTime 指定动画开始的时间。设置延时的方法为CACurrentMediaTime() + 秒数的方式
    timingFunction 设置动画的速度变化
    fillMode 动画在开始和结束时的动作,默认值是KCAFillModeRemoved
    autoreverses 动画结束时是否执行逆动画
    fromValue 所改变属性的起始值
    toValue 所改变属性的结束时的值
    byValue 所改变属性相同起始值的改变量
    2.属性值的解释
    • repeatCount:如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF
    • timingFunction:


    kCAMediaTimingFunctionLinear--在整个动画时间内动画都是以一个相同的速度来改变。也就是匀速运动。一个线性的计时函数,同样也是CAAnimation的timingFunction属性为空时候的默认函数。线性步调对于那些立即加速并且保持匀速到达终点的场景会有意义(例如射出枪膛的子弹)。

    kCAMediaTimingFunctionEaseIn:动画开始时会较慢,之后动画会加速。一个慢慢加速然后突然停止的方法。对于之前提到的自由落体的例子来说很适合,或者比如对准一个目标的导弹的发射。

    kCAMediaTimingFunctionEaseOut:动画在开始时会较快,之后动画速度减慢。它以一个全速开始,然后慢慢减速停止。它有一个削弱的效果,应用的场景比如一扇门慢慢地关上,而不是砰地一声。

    kCAMediaTimingFunctionEaseInEaseOut:动画在开始和结束时速度较慢,中间时间段内速度较快。创建了一个慢慢加速然后再慢慢减速的过程。这是现实世界大多数物体移动的方式,也是大多数动画来说最好的选择。如果只可以用一种缓冲函数的话,那就必须是它了。那么你会疑惑为什么这不是默认的选择,实际上当使用UIView的动画方法时,他的确是默认的,但当创建CAAnimation的时候,就需要手动设置它了。

    kCAMediaTimingFunctionDefault:它和kCAMediaTimingFunctionEaseInEaseOut很类似,但是加速和减速的过程都稍微有些慢。它和kCAMediaTimingFunctionEaseInEaseOut的区别很难察觉,可能是苹果觉得它对于隐式动画来说更适合(然后对UIKit就改变了想法,而是使用kCAMediaTimingFunctionEaseInEaseOut作为默认效果),虽然它的名字说是默认的,但还是要记住当创建显式的CAAnimation它并不是默认选项(换句话说,默认的图层行为动画用kCAMediaTimingFunctionDefault作为它们的计时方法)。
    使用方法:
    pathAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)

    • fillMode


    kCAFillModeForwards:动画开始之后layer的状态将保持在动画的最后一帧,而removedOnCompletion的默认属性值是 YES,所以为了使动画结束之后layer保持结束状态,应将removedOnCompletion设置为NO。

    kCAFillModeBackwards:将会立即执行动画的第一帧,不论是否设置了 beginTime属性。观察发现,设置该值,刚开始视图不见,还不知道应用在哪里。

    kCAFillModeBoth:该值是 kCAFillModeForwards 和 kCAFillModeBackwards的组合状态

    kCAFillModeRemoved:动画将在设置的 beginTime 开始执行(如没有设置beginTime属性,则动画立即执行),动画执行完成后将会layer的改变恢复原状。

    • 3.使用心得
      尽量不要设置removedOnCompletion = false ,因为配合CAAnimationDelegate会带来循环运用的问题,如果需要动画停留在最后的状态,可以直接设置View的center属性在动画结束的位置Point。
      之所以会出现 循环引用 因为由于CAAnimation的delegate使用的strong类型:看一下简要的说明图:


    解决有时视图会闪动一下的问题,我们可以将layer的属性值设置为我们的动画最后要达到的值,然后再给我们的视图添加layer动画。

    相关文章

      网友评论

          本文标题:动画相关的知识总结

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