iOS开发iOS技术资料iOS Developer

Core Animation

2017-07-06  本文已影响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:结算时间(根据动画参数估算弹簧开始运动到停止的时间,动画设置的时间最好根据此时间来设置)

上一篇下一篇

猜你喜欢

热点阅读