CAAnimation
这是一篇以前写的笔记。无聊放上来吧。
CABasicAnimation
一段展示了CABasicAnimation用法的代码
Key Path
Structure Field | Description |
---|---|
rotation.x | The rotation, in radians, in the x axis. |
rotation.y | The rotation, in radians, in the y axis. |
rotation.z | The rotation, in radians, in the z axis. |
rotation | The rotation, in radians, in the z axis.This is identical to setting the rotation.z field |
scale.x | Scale factor for the x axis. |
scale.y | Scale factor for the y axis. |
scale.z | Scale factor for the z axis. |
scale | Average of all three scale factors. |
translation.x | Translate in the x axis. |
translation.y | Translate in the y axis. |
translation.z | Translate in the z axis. |
translation | Translate in the x and y axis. Value is an NSSize or CGSize |
Fill Mode
fillMode
的作用就是决定当前对象过了非active时间段的行为. 比如动画开始之前,动画结束之后。如果是一个动画CAAnimation
,则需要将其removedOnCompletion
设置为NO
,要不然fillMode
不起作用. 下面来讲各个fillMode
的意义
kCAFillModeRemoved
这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
kCAFillModeForwards
当动画结束后,layer会一直保持着动画最后的状态
kCAFillModeBackwards
这个和kCAFillModeForwards
是相对的,就是在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始.你可以这样设定测试代码,将一个动画加入一个layer的时候延迟5秒执行.然后就会发现在动画没有开始的时候,只要动画被加入了layer,layer便处于动画初始状态
kCAFillModeBoth
理解了上面两个,这个就很好理解了,这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态.
CAKeyFrameAnimation
一段展示了CAKeyFrameAnimation用法的代码
values属性
指明关键帧的点
path
也可以给animation设置path
,设置path会覆盖values
keyTimes
timeFunctions
calculationMode
-
kCAAnimationLinear
线性,默认 -
kCAAnimationDiscrete
离散,keyTimes
依旧有效 -
kCAAnimationPaced
平均,keyTimes
跟timeFunctions
失效 -
kCAAnimationCubic
平均 -
kCAAnimationCubicPaced
平均
实现暂停开始的代码
代码展示
关于暂停开始动画两个函数的理解
暂停的时候,记录下暂停的时间,把layer的速度设置成了0.0,这样的话附加在layer上面的动画速度也变成了0.0,时间停止走动。
接着给layer一个timeOffset,可以让layer停在那个时刻。
重新开始动画,把layer的speed设置成1.0,layer的时间又可以开始走了,然后重设timeOffset和beginTime,接着计算出上次暂停到现在调用函数的时间,把layer的beginTime设置成这段时间。
这里就是我久久不能理解的地方,现在我的理解是:
假设暂停了动画,时间走过6个单位后,重新开始动画,那么,就会将beginTime设置成6个单位,beginTime是相对于父级的时间,意思就是相对父级6个单位之后进行动画。而此时父级已经走过了6个单位,于是直接接着播放动画。
执行动画的细节
要在添加动画之前对动画的各个属性进行设置,一旦添加了动画再进行设置就没有用了
给Layer添加动画的时候,会对动画执行一次拷贝,执行的动画是那份拷贝。
CATransform3D
CATransform3DMakeRotation
CATransform3DMakeRotation
总是按最短路径来选择,当顺时针和逆时针的路径相同时,使用逆时针。若需要使其按顺时针旋转,用CAKeyframeAnimation
并在顺时针路径上增加几个关键点即可。