美文网首页iOS面试题iOS 学习
CoreAnimation 核心动画

CoreAnimation 核心动画

作者: 后浪普拉斯 | 来源:发表于2018-05-29 11:59 被阅读0次

    使用步骤:
    1、初始化一个动画对象(CAAnimation)并设置一些动画相关属性
    2、添加动画对象到层(CALayer)中,开始执行动画

    通过调用CALayer的addAnimation:forKey增加动画到层(CALayer)中,这样就能触发动画了。通过调用removeAnimationForKey可以停止层中的动画。
    Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。

    image.png

    CAAnimation

    所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它具体的子类
    属性解析:(1代表来自CAMediaTiming协议的属性)

    1、CAMediaTiming协议的属性
    duration:动画的持续时间
    repeatCount:动画的重复次数
    repeatDuration:动画的重复时间
    fillMode:决定当前对象在非active时间段的行为.比如动画开始之前,动画结束之后
    beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
    2、自身属性
    removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
    timingFunction:速度控制函数,控制动画运行的节奏
    delegate:动画代理

    CAPropertyAnimation

    CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation。
    属性解析:
    keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果

    CABasicAnimation

    CABasicAnimation 是 CAPropertyAnimation的子类。
    属性解析:
    fromValue:keyPath相应属性的初始值
    toValue:keyPath相应属性的结束值
    随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue.

    如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。比如,CALayer的position初始值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为(100,100),虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)

    1、核心动画并未改变控件真实大小
    (1)真实改变控件大小,在动画结束之后设置控件大小,通过动画的delegate
    设置代理
    animation.delegate = self;
    实现代理方法
    -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
    self.imageV.bounds = CGRectMake(50, 50, 200, 200);
    }
    (2)动画完成之后保持执行后的状态,而默认执行完动画之后会返回原来的状态
    //保持动画对象,动画对象不要移出
    animation.removedOnCompletion = NO;
    //保存当前状态
    animation.fillMode = kCAFillModeForwards;

    CAKeyframeAnimation

    CAKeyframeAnimation是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值

    属性解析:
    values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧。

    path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略。

    keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的。

    CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation。

    CAAnimationGroup

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

    CATransition

    CATransition 是 CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点.
    UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果。
    属性解析:
    type:动画过渡类型
    subtype:动画过渡方向
    startProgress:动画起点(在整体动画的百分比)
    endProgress:动画终点(在整体动画的百分比)

    /**
     * 提示:转场的动画的类型(type)和子头型(subtype) 能用字符串常量就用字符常量
     */
    
     *******************************************************
     type:动画类型(比如:滴水效果,翻转效果...)
     -------------------------------------------------------
     fade kCATransitionFade 交叉淡化过渡
     moveIn kCATransitionMoveIn 新视图移到旧视图上面
     push kCATransitionPush 新视图把旧视图推出去
     reveal kCATransitionReveal 将旧视图移开,显示下面的新视图
     pageCurl               向上翻一页
     pageUnCurl             向下翻一页
     rippleEffect             滴水效果
     suckEffect 收缩效果,如一块布被抽走
     cube                   立方体效果
     oglFlip              上下左右翻转效果
     rotate     旋转效果
     cameraIrisHollowClose 相机镜头关上效果(不支持过渡方向)
     cameraIrisHollowOpen 相机镜头打开效果(不支持过渡方向)
     
     *******************************************************
     subtype: 动画方向(比如说是从左边进入,还是从右边进入...)
     ------------------------------------------------------
     kCATransitionFromRight;
     kCATransitionFromLeft;
     kCATransitionFromTop;
     kCATransitionFromBottom;
     
     当 type 为@"rotate"(旋转)的时候,它也有几个对应的 subtype,分别为:
     90cw 逆时针旋转 90°
     90ccw 顺时针旋转 90°
     180cw 逆时针旋转 180°
     180ccw  顺时针旋转 180°
    

    相关文章

      网友评论

        本文标题:CoreAnimation 核心动画

        本文链接:https://www.haomeiwen.com/subject/gmsbdftx.html