CAKeyframeAnimation关键帧动画

定义:任何动画要表现出运动或者变化,至少需要两个不同的关键状态,而中间的状态的变化可以通过插值计算完成,从而形成补间动画,表示关键状态的帧叫做关键帧.

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;

用例:

CAKeyframeAnimation关键帧动画_第1张图片
上下抖动
CAKeyframeAnimation关键帧动画_第2张图片
沿着椭圆运动

//注释:

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.

//既光滑又匀速。

你可能感兴趣的:(CAKeyframeAnimation关键帧动画)