iOS 核心动画(3)之显式动画

96
市民张某
2016.12.20 15:25* 字数 983

简介

    在一段时间内显示的内容发生变化,这个过程称之为Animation(动画)。Animation作用于图层,图层也提供了接口用于添加Animation。当需要对图层进行Animation或者需要对Animation做出更多自定义行为的时候,就必须用到显示动画。显示动画基类CAAnimation,能用的动画类只有CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup。

网上找的图

动画类介绍

1.CAAnimation

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个值之间渐变。

CABasicAnimation属性

            举个例子:  

CABasicAnimation  Demo

    (2)CAKeyframeAnimation(关键帧动画)
             CAKeyframeAnimation也是CAPropertyAnimation的子类,与CABasicAnimation的区别是CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值。CABasicAnimation可看做是只有2个关键帧的CAKeyframeAnimation。

CAKeyframeAnimation属性

              举个例子

CAKeyframeAnimation Demo

3.CATransition(转场动画)
   
CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果

CATransition属性

4.CAAnimationGroup
    动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行。默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间。

CAAnimationGroup属性

     举个例子

CAAnimationGroup Demo

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;

OC专题
Web note ad 1