一、CoreAnimation
的介绍
Core Animation
是一组非常强大的动画处理API,使用它能做出非常绚丽的动画效果,而且往往是事半功倍,使用它需要添加QuartzCore.framework
和引入对应的框架<QuartzCore/QuartzCore.h>
.
二、CoreAnimation
的动画对象CAAnimation
-
CAPropertyAnimation
:CAAnimation
的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation
和CAKeyframeAnimation
.
keyPath
:CoreAnimation 的 keyPath 是针对layer的属性来的,凡是属性备注最后又Animatable的都能用来当做动画属性
常用的动画属性如下表
属性 | 注释 |
---|---|
bounds | 尺寸 |
position | 位置 |
zPosition | z轴位置 |
anchorPoint | 锚点 |
anchorPointZ | z轴锚点 |
hidden | 隐藏 |
borderWidth | 边框宽度 |
borderColor | 边框颜色 |
cornerRadius | 圆角 |
opacity | 透明度 |
shadowColor | 阴影颜色 |
shadowOffset | 阴影偏移 |
shadowOpacity | 阴影透明度 |
shadowRadius | 阴影圆角 |
transform | transform.translation.x(y, z) 平移 transform.scale.x(y, z)缩放 transform.rotation.x(y, z) 旋转,z轴的动画,在没有设置透视效果的情况下看不到,所以一般不用,要看到z轴的动画一般直接用transfrom来做在keyPath,并设置CATransform3D结构体对象的m34属性 |
strokeEnd | CAShapeLayer(终点) |
strokeStart | CAShapeLayer(起点) |
colors | CAGradientLayer(渐变色数组) |
locations | CAGradientLayer(渐变色位置数组) |
startPoint | CAGradientLayer(开始位置,默认是0.5,0) |
endPoint | CAGradientLayer(结束位置,默认是0.5,1) |
instanceCount | CAReplicatorLayer(复制数) |
instanceTransform | CAReplicatorLayer(赋值层形变) |
-
CABasicAnimation
:根据keyPath设置layer动画的起始位置和结束位置,实现单步动画 -
CAKeyframeAnimation
:有多个变化组合而成的动画
CAKeyframeAnimation
的属性设置,CABasicAnimation
可以看成是values
数组中只包含两个元素的CAKeyframeAnimation
@property(nullable, copy) NSArray *values;
@property(nullable) CGPathRef path;
@property(nullable, copy) NSArray<NSNumber *> *keyTimes;
@property(nullable, copy) NSArray<CAMediaTimingFunction *> *timingFunctions;
-
CAAnimationGroup
:由多个基本动画组成的动画组,设置其@property(nullable, copy) NSArray<CAAnimation *> *animations;
属性来组合动画 -
CATransition
:转场动画
CATransition
的属性设置和说明
@property(copy) NSString *type; // 转场类型
kCATransitionFade
kCATransitionMoveIn
kCATransitionPush
kCATransitionReveal
@property(nullable, copy) NSString *subtype; // 转场方向
kCATransitionFromRight
kCATransitionFromLeft
kCATransitionFromTop
kCATransitionFromBottom
CATransition还可以用来给UIImageView,UILabel等实现转场动画,在他们改变图片,文字,字体,颜色的时候,非常实用
三、CAAnimation
的常用属性
以下属性是给
CAAnimation
设置动画效果的
- 1.
duration
:动画的持续时间 - 2.
repeatCount
:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT - 3.
removedOnCompletion
:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode
为kCAFillModeForwards
,但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。 - 4.
fillMode
:决定当前对象在非active时间段的行为
kCAFillModeRemoved, // 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
kCAFillModeForwards, // 当动画结束后,layer会一直保持着动画最后的状态
kCAFillModeBackwards // 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
kCAFillModeBoth // 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态 - 5.
timingFunction
:速度控制函数,控制动画运行的节奏
kCAMediaTimingFunctionLinear(线性), // 匀速,给你一个相对静态的感觉
kCAMediaTimingFunctionEaseIn(渐进), // 动画缓慢进入,然后加速离开
kCAMediaTimingFunctionEaseOut(渐出) // 动画全速进入,然后减速的到达目
kCAMediaTimingFunctionEaseInEaseOut(渐进渐出) // 动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。