简介
在一段时间内显示的内容发生变化,这个过程称之为Animation(动画)。Animation作用于图层,图层也提供了接口用于添加Animation。当需要对图层进行Animation或者需要对Animation做出更多自定义行为的时候,就必须用到显示动画。显示动画基类CAAnimation,能用的动画类只有CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup。
动画类介绍
1.CAAnimation
有两个属性需要注意下
(1)fillMode属性的设置(要想fillMode有效,最好设置removedOnCompletion=NO)
kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态。
kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态。
kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态。
(2)速度控制函数(CAMediaTimingFunction)
kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉。
kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开。
kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地。
kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。
2.CAPropertyAnimation
CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation。两个动画子类都是对keyPath属性进行操作,通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@“position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果。但要注意,CALayer的属性必须是"Animatable"。
(1)CABasicAnimation(基本动画)
随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue。keyPath内容是CALayer的可动画Animatable属性。虽然能够做很多基本的动画效果,但是有个局限性,只能让CALayer的属性从某个值渐变到另一个值,仅仅是在2个值之间渐变。
举个例子:
(2)CAKeyframeAnimation(关键帧动画)
CAKeyframeAnimation也是CAPropertyAnimation的子类,与CABasicAnimation的区别是CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值。CABasicAnimation可看做是只有2个关键帧的CAKeyframeAnimation。
举个例子
3.CATransition(转场动画)
CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。
4.CAAnimationGroup
动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行。默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间。
举个例子
5.额外
使用UIView动画函数实现转场动画----单视图
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void(^)(void))animations completion:(void(^)(BOOLfinished))completion;
使用UIView动画函数实现转场动画——双视图
+ (void)transitionFromView:(UIView*)fromView toView:(UIView*)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void(^__nullable)(BOOLfinished))completion;