Core Animation(核心动画)是一组功能强大、效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用。
可以看到,核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果。
核心动画作用在CALayer上。每一个View都有其对应的layer,这个layer是root layer.
给view加上动画,本质上是对其layer进行操作,layer包含了各种支持动画的属性,动画则包含了属性变化的值、变化的速度、变化的时间等等,两者结合产生动画的过程。
核心动画的优点就是:性能强大 使用硬件加速 可以同时向多个图层添加不同的动画效果,接口易用,只需要少量的代码可以实现复杂的动画效果。运行在后台的线程中 在动画过程中可以响应交互事件。
CAAnimation是所有动画对象的父类负责控制动画的时间 速度 和时间曲线,是一个抽象类 不能直接使用。
CAPropertyAnimation:CAAnimation的子类 支持动画地显示图层的keyPath,一般不直接使用。
ios 9.0之后新增CASpringAnimation类 它实现弹簧效果动画,是CABasicAnimation的子类。
核心动画类中可以直接使用的类有:
CABasicAnimation
CAKeyframeAnimation
{重要属性:
type:过渡动画的类型
type的enum值如下:
kCATransitionFade 渐变
kCATransitionMoveIn 覆盖
kCATransitionPush 推出
kCATransitionReveal 揭开
subtype的enum值如下:
kCATransitionFromRight 从右边
kCATransitionFromLeft 从左边
kCATransitionFromTop 从顶部
kCATransitionFromBottom 从底部
}
CATransition
CAAnimationGroup
CASpringAnimation
核心动画类的核心方法
初始化 设置动画的相关属性 动画的添加和移除
keypath 可以指定keypath为CALayer的属性值,并对它的值进行修改,以达到对应的动画效果,需要注意的是部分属性是不支持动画效果的
timeFunction:动画的时间节奏控制
timingFunctionName的enum值如下:
kCAMediaTimingFunctionLinear 匀速
kCAMediaTimingFunctionEaseIn 慢进
kCAMediaTimingFunctionEaseOut 慢出
kCAMediaTimingFunctionEaseInEaseOut 慢进慢出
kCAMediaTimingFunctionDefault 默认值(慢进慢出)
CAKeyframeAnimation 可以设定keyPath起点、中间关键点(不止一个)、终点的值,每一帧所对应的时间,动画会沿着设定点进行移动。
CAKeyframeAnimation的重要属性:values关键帧数组对象 里面每一个元素即为一个关键帧 动画会在duration时间内执行数组中每一个关键帧的动画。
path 动画路径对象 可以指定一个路径,在执行动画时会沿着路径移动,path在动画中会影响视图的position。
CATransition 转场动画, 苹果私有api 使用需注意可能被打回
ani.type = @"cube";//--立方体
ani.type = @"suckEffect";// 吸走的效果
ani.type = @"oglFlip";//When subType is "fromLeft" or "fromRight", it's the official one.//前后翻转效果
ani.type = @"rippleEffect";//波纹效果
ani.type = @"pageCurl";//翻页起来
ani.type = @"pageUnCurl";//翻页下来
ani.type = @"cameraIrisHollowOpen ";//镜头开
ani.type = @"cameraIrisHollowClose ";//镜头关
CASpringAnimation 是ios9新加入的动画类型,是CABasicAnimation的子类,用于实现弹簧动画。
CASpringAnimation的重要属性:
mass:质量(影响弹簧的惯性,质量越大,弹簧惯性越大,运动的幅度越大)
stiffness:弹性系数(弹性系数越大,弹簧的运动越快)
damping:阻尼系数(阻尼系数越大,弹簧的停止越快)
initialVelocity:初始速率(弹簧动画的初始速度大小,弹簧运动的初始方向与初始速率的正负一致,若初始速率为0,表示忽略该属性)
settlingDuration:结算时间(根据动画参数估算弹簧开始运动到停止的时间,动画设置的时间最好根据此时间来设置)
CAAnimationGroup
使用Group可以将多个动画合并一起加入到层中,Group中所有动画并发执行,可以方便地实现需要多种类型动画的场景