定义:任何动画要表现出运动或者变化,至少需要两个不同的关键状态,而中间的状态的变化可以通过插值计算完成,从而形成补间动画,表示关键状态的帧叫做关键帧.
CABasicAnimation其实可以看作一种特殊的关键帧动画,只有头尾两个关键帧.CAKeyframeAnimation则可以支持任意多个关键帧,关键帧有两种方式来指定,使用path或者使用values,path是一个CGPathRef的值,且path只能对CALayer的 anchorPoint 和 position 属性起作用,且设置了path之后values就不再起效了.而values则更加灵活. keyTimes这个可选参数可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的.
CABasicAnimation基础动画只能从一个值变到另外一个值;只有三个属性:
@property(nullable, strong) id fromValue;
@property(nullable, strong) id toValue;
@property(nullable, strong) id byValue;
CAKeyframeAnimation关键帧添加了许多的属性:
//一个NSArray对象。里面的元素称为”关键帧”(keyframe),动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
@property(nullable, copy) NSArray *values;
//path : (画圆、椭圆、贝塞儿曲线)可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动,path只对CALayer的anchorPoint和position起作用,如果你设置了path,那么values将被忽略
@property(nullable) CGPathRef path;
@property(nullable, copy) NSArray*keyTimes;
//控制动画快进慢出、慢进快出等特性
@property(nullable, copy) NSArray*timingFunctions;
@property(copy) NSString *calculationMode;
@property(nullable, copy) NSArray*tensionValues;
@property(nullable, copy) NSArray*continuityValues;
@property(nullable, copy) NSArray*biasValues;
@property(nullable, copy) NSString *rotationMode;
用例:
//注释:
1.我们可以利用values来定义各个位置,来规划直线路径。
2.我们可以利用keypath来画线,这样规划曲线路径来进行动画。
关键帧动画的基础步骤
1.决定你想要做动画的属性(例如,框架,背景,锚点,位置,边框,等等)
2.在动画对象值的区域中,指定开始,结束,和中间的值。这些都是你的关键帧(看清单 4-2)
3.使用 duration 这个字段指定动画的时间
4.通常来讲,通过使用 times 这个字段,来给每帧动画指定一个时间。如果你没有指定这些,核心动画就
会通过你在 values 这个字段指定的值分割出时间段。
5.通常,指定时间功能来控制步调。 这些都是你需要做的。你创建你的动画和增加他们到层中。调用-addAnimation 就开始了动画。
//注意:
calculationMode这个属性非常重要:
计算模式.其主要针对的是每一帧的内容为一个座标点的情况,也就是对anchorPoint 和 position 进行的动画.这个属性用来设定, 关键帧中间的值是怎么被计算的。
CA_EXTERN NSString * const kCAAnimationLinear
//Simple linear calculation between keyframe values.
//简单的线性计算,也是默认值。
CA_EXTERN NSString * const kCAAnimationDiscrete
//Each keyframe value is used in turn, no interpolated values are calculated.
//轮流使用关键值,无内插值参与计算,即离散的点。
CA_EXTERN NSString * const kCAAnimationPaced
//Linear keyframe values are interpolated to produce an even pace throughout the animation.
//通过内插值,均匀的进行动画。
CA_EXTERN NSString * const kCAAnimationCubic
//Smooth spline calculation between keyframe values..
//光滑运算
CA_EXTERN NSString * const kCAAnimationCubicPaced
//Cubic keyframe values are interpolated to produce an even pace throughout the //animation.
//既光滑又匀速。