基本概念
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:结算时间(根据动画参数估算弹簧开始运动到停止的时间,动画设置的时间最好根据此时间来设置)
网友评论