Core Animation
Core Animation动画的核心是CALayer,每个UIView都有自己的CALayer,而且每个CALayer都可以不断地添加子CALayer,CALayer所在的CALayer被称为父CALayer,CALayer的这种组织方式被称为Layer Tree。
Core Animation动画涉及如下API:
(1) CAAnimation:它是所有动画类的基类,它实现了CAMediaTiming协议,提供了动画的持续时间、速度和重复计数等。CAAnimation还实现了CAAction协议,该协议为CALayer动画除法的动作提供标准化响应。
(2) CATransition:CAAnimation的子类,CAAnimation可通过预设的过度效果来控制CALayer层的过渡动画。
(3) CAPropertyAnimation:它是CApropertAnimation的一个子类它代表一个属性动画,可通过+animationWithKeyPath:类方法来创建属性动画实例。
(4) CABasicAnimation:CAPropertAnimation的子类,简单控制CALayer层的属性改变,从而实现动画效果。
(5) CAKeyframeAnimation:CAPropertyAnimation的子类,关键帧的属性动画,该动画最大的特点在于可通过values属性指定多个关键帧,通过多个关键帧可以指定动画的各阶段的关键值。
(6) CAAnimationGroip:它是CAAnimation的子类,用于将多个动画组合在一起执行。
使用CALayer
CALayer代表一个层,它提供了一个+layer类方法来创建CALayer层,具体如下:
(1) 创建一个CALayer。
(2) 设置CALayer的contents属性即可设置该CALayer所显示的内容,该属性通常可指定一个CGImage,即代表该CALayer将要显示的图片。
(3) 为CALayer设置backgroundColor、frame、position、anchorPoint、border、shadow等属性,具体参考文档、
(4) 将CALayer添加到父CALayer中即可。
使用CATransition控制过渡动画
CATransition通常用于通过CALayer控制UIView内子控件的过渡动画,具体步骤如下:
(1) 创建CATransition对象。
(2) 为CATransition设置type和subtype两个属性、
(3) 如果不需要动画执行整个过程,可以指定startProgress、endProgress属性。
(4) 调用UIView的layer属性的addnimation:forKey:方法控制该UIView内子控件的过渡动画。
CAAnimation提供如下属性和方法:
(1) removedOnCompletion:该属性用于指定动画完成时是否从目标CALayer上删除该动画。
(2) timingFunction:该属性用于指定一个CAMediaTimingFuncion对象,该对象负责控制彼岸花步长。
(3) -animationDidStart:(CAAnimation*)theAnimation:该动画开始时回调该方法。
(4) -animationDidStop:(CAAnimation*)theAnimation finished:(BOOL)flag:该动画结束时回调该方法。
CATransition的type属性用于控制动画类型,它支持如下值:
(1) kCATransitionFade:通过渐隐效果控制子组件的过渡。这是默认的属性值。
(2) kCATransitionMoveIn:通过移入动画控制子组件的过渡。
(3) kCATransitionPush:通过推入动画控制子组件的过渡。
(4) kCATransitionReveal:通过揭开动画控制子组件的过渡。
除此之外,该属性还支持如下私有动画:
(1) cube:通过立方体旋转动画控制子组件的过渡。
(2) suckEffect:通过收缩动画控制子组件的过渡。
(3) oglFlip:通过翻转动画控制子组件的过渡。
(4) rippleEffect:通过水波动画控制子组件的过渡。
(5) pageCurl:通过页面揭开动画控制子组件的过渡。
(6) pageUnCurl:通过放下页面动画控制子组件的过渡。
(7) cameraIrisHollowOpen:通过镜头打开动画控制子组件的过渡。
(8) cameraIrisHollowClose:通过镜头关闭动画控制子组件的过渡。
CATransition的subyte属性用于控制动画方向,它支持如下值:
(1) kCATransitionFromRight。
(2) kCATransitionFromLeft。
(3) kCATransitionFromTop。
(4) kCATransitionFromBottom。
实际上,控制UIView内子控件的过渡还有另一种方式,具体步骤如下:
(1) 调用UIView的beginAnimation方法开始动画。
(2) 调用UIView的setAnimationTransition:forView:cache:设置动画类型、setAnimationCurve:方法设置动画的变化曲线。
(3) 调用UIView的commitAnimations方法提交动画。
使用属性动画
属性动画由CAPropertyAnimation代表,该对象用户控制CALayer的动画属性持续改变,当CALayer的动画属性持续改变时,CALayer的外观就会持续改变。
CAPropertyAnimation提供如下类方法创建属性动画:
+(id)animationWithKeyPath:(NSString*)keyPath:该方法仅需要一个参数,该参数只是一个字符串类型的值,指定CALayer的动画属性名,设置该属性动画控制CALayer的哪个动画属性持续改变。
除此之外,CAPropertyAnimation还支持如下属性:
(1) keyPath:该属性返回创建CAPropertyAnimation时指定的参数
(2) additive:该属性指定该属性动画是否以当前动画效果为基础。
(3) cumulative:该属性指定动画是否为累加效果。
(4) valueFunction:该属性值是一个CAValueFuntion对象,该对象负责对属性改变的插值计算。系统已提供默认插值计算方式,一般无须指定该属性。
(5) affineTransform:该属性值指定一个CGAffineTransform对象,该对象代表对CALayer执行X、Y两个维度的旋转、缩放、位移、斜切、镜像等变换矩阵。
(6) transform:该属性值制定一个CATransform3D对象。该对象代表对CALayer执行X、Y、Z三个维度中的旋转、缩放、位移、斜切、镜像等变换矩阵。
调用CALayer的addAnimation:forKey:添加动画即可,方法如下:
(1)-addAnimation:forKey:为该CALayer添加一个动画。
(2)-animationForKey:控制该CALayer执行指定key所对应的动画。
(3)-removeAllAnimation:删除该CALayer上添加的所有动画。
(4)-removeAnimationForKey:根据key删除该CALayer上指定的动画。
(5)-animationKeys:获取该CALayer上添加的所有动画key所组成的动画。
控制移动路径
对CAKeyframeAnimation而言,它除了可通过values属性指定动画过程中的多个值之外,还可通过path属性指定CALayer的移动路径,该属性值就是的CGPathRef,通过这种方式即可控制CALayer按我们指定的轨迹移动,从而执行更细致的动画。