Core Animation

作者: 夏天的橙子_ | 来源:发表于2017-07-06 17:21 被阅读61次

    基本概念

    Core Animation 作用在 CALayer 上,CALayer从概念上类似UIView,每一个UIView都有一个layer属性,可以通过这个layer来为更改相应view的形式,或者做动画。

    我们可以将UIView看成是一种特殊的CALayer,UIView下有一个layer属性,这个layer层就是真正绘制UIView所要展示的东西的人。然而之所以要将CALayer封装成UIView则是为了给其添加事件响应。

    类的架构

    CAAnimation是所有动画对象的父类,实现CAMediaTiming协议,负责控制动画的时间、速度和时间曲线等,为抽象类,不能直接使用。

    CAPropertyAnimation属性动画,一般不直接使用。

    CATransition转场动画。

    CAAnimationGroup组合动画。

    CABasicAnimation基本动画。

    CAKeyFrameAnimation关键帧动画。

    CASpringAnimation弹簧动画,iOS9.0之后新增类,是CABasicAnimation的子类。

    CAMediaTiming协议

    通过CAAnimation实现的协议为CAMediaTiming。

    repeatCount,动画的重复次数,可以设置为小数。设置为HUGE_VALF,表示无限重复。

    repeatDuration,动画总时长,如果大于单次时长,则重复;如果小于单次时长,则截断。

    duration,单次动画时长。

    speed,图层或动画模型相对于父图层CALayer的时间流逝速度。

    fillMode,有效期结束后,动画对象的呈现效果是冻结还是移除。

    beginTime,相对于父对象的开始时间。注意,以系统的绝对时间为准。例如:

    timeOffset,时间轴偏移量。将时间轴移动至偏移位置,再执行整个动画时长。假设动画时长3秒,偏移量为8,则开始位置为8 % 3 = 2,再执行3秒,即在整个时长的1/ 3处结束。

    CACurrentMediaTime,返回系统当前的绝对时间(从本次开机开始),单位秒。

    CAAnimation

    timingFunction动画执行的快慢交替。有如下几个可选项。

    kCAMediaTimingFunctionLinear//线性节奏,就是匀速

    kCAMediaTimingFunctionEaseIn//淡入,缓慢加速进入,然后匀速

    kCAMediaTimingFunctionEaseOut//淡出,匀速,然后缓慢减速移除

    kCAMediaTimingFunctionEaseInEaseOut//淡入淡出,结合以上两者

    kCAMediaTimingFunctionDefault//默认效果

    delegate代理。

    - (void)animationDidStart:(CAAnimation *)anim;//动画开始

    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag; //动画结束。flag,动画正常播放完成返回为YES。没有播放完成或者被移除则返回NO。

    removedOnCompletion

    默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode。

    CABasicAnimation

    fromValue  开始的值

    toValue    结束时的值

    byValue    动画过程中的值

    为了防止冲突,toValue只能设置一个。

    keyPath

    [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]

    keypath需要填写指定的值,详情见下列表

    还有如下属性(不完整)

    CAKeyFrameAnimation 

    关键帧动画,提供几个关键的值,中间的动画会自动生成。

    values存放“关键帧”,动画会一次到达关键帧指定的值,并自动生成中间动画。

    path    路径,可以设置一个CGPathRef的路径,让图层按照路径移动,因此只对anchorPosition和position起作用,当设置了path会忽略掉values中的值。

    keyTimes 指定到达每个关键帧的时间,与values对应,不设置就是平分。timingFunctions  指定到达每一帧的速度,度values对应,可以不设置。

    CAAnimationGrop

    组合动画,存放多个layer动画。

    animations数组,里面存放动画(动画可以是,基本动画、关键帧动画等其他动画)里面存放的动画可以不设置时间和重复次数,统一在CAAnimationGrop对象中设置。数组中动画的duration可以单独设置,还可以设置数组中动画的开始时间,来控制动画单个动画在组动画中的执行时间,但是时间不能超过组动画的时间,如果超过,该动画不会执行。

    CATransition

    转场动画,主要用于转场动画从一个场景以动画的形式过渡到另一个场景。

    type 过渡动画的类型。

    kCATransitionFade \\渐变

    kCATransitionMoveIn \\覆盖

    kCATransitionPush \\推出

    kCATransitionReveal \\揭开

    subtype 过渡动画的方向

    kCATransitionFromRight \\从右边

    kCATransitionFromLeft \\从左边

    kCATransitionFromTop \\从顶部

    kCATransitionFromBottom \\从底部

    endProgress 定义过渡的结束点,结束点的值必须大于或者等于开始点。默认值为1.0。

    startProgress 定义过度的开始点,开始点的值必须小于或者等于结束点。默认值为0.0。

    这两个属性是float类型的,可以控制动画进行的过程,可以让动画停留在某个动画点上,值在0.0到1.0之间。endProgress要大于等于startProgress。比如:立方体转,可以设置endProgress= 0.5,让动画停留在整个动画的特定位置(停止在旋转一般的状态)。

    CASpringAnimation

    CASpringAnimation是iOS9新加入动画类型,是CABasicAnimation的子类,用于实现弹簧动画。

    mass:质量(影响弹簧的惯性,质量越大,弹簧惯性越大,运动的幅度越大)

    stiffness:弹性系数(弹性系数越大,弹簧的运动越快)

    damping:阻尼系数(阻尼系数越大,弹簧的停止越快)

    initialVelocity:初始速率(弹簧动画的初始速度大小,弹簧运动的初始方向与初始速率的正负一致,若初始速率为0,表示忽略该属性)

    settlingDuration:结算时间(根据动画参数估算弹簧开始运动到停止的时间,动画设置的时间最好根据此时间来设置)

    相关文章

      网友评论

        本文标题:Core Animation

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