• IOS动画(CALayer、CoreAnimation简介)


    IOS动画(CALayer、CoreAnimation简介)


    一。CALayer

    优点:

    • 每个UIView上都可以放置几百个CALayer
    • Core Animation动画在单独的线程总完成,不会阻塞主线程
    • Core Animation动画只重绘界面上变化的部分

    提供的方法:

    • addAnimation:forKey: 添加一个动画并制定对应的key
    • animationForKey:执行key对应的动画
    • removeAllAnimations:删除该CALayer上添加的所有动画
    • removeAnimationForKey: 删除key对应的动画
    • animationKeys:获取所有动画key组成的数组
    • presentationLayer:获取calayer的表现层
      • 对于presentationLayer,这个属性不一定总会返回一个实体对象,只有当进行动画或者其他渲染的操作时,这个属性会返回一个在当前屏幕上的layer
      • 并且每一次执行,这个对象都会不同,它是原layer的一个副本
      • 可以用来获取当前动画的改变中属性的实时值

    二。相关类

    • CAAnimation :所有动画类的基类
      • 实现CAMediaTiming协议,提供了动画的持续时间 、速度和重复计数
      • 实现CAAction协议,为动画触发的动画提供标准化响应
    • CATransition
      • 可通过预设的过渡效果来控制CALayer层的过渡效果。
    • CAPropertyAnimation(CABasicAnimation 和 CAKeyframeAnimation 的父类)
      • 代表属性动画。 可以通过 animationWithKeyPath: 类方法来创建属性动画实例。
    • CABasicAnimation
      • 简单控制CALayer层的属性慢慢变化。
    • CAKeyframeAnimation
      • 支持关键帧的属性动画,该动画最大的特点在于可通过values属性指定多个关键帧,通过多个关键帧可以指定动画的各阶段的关键值。
    • CAAnimationGroup
      • 用于将 多个动画组合在一起执行。

    继承关系图:


    三。 CAAnimation 提供的属性和方法

    CAAnimation 提供的属性和方法

    • removedOnCompletion:该属性用于指定该动画完成时是否从目标CALayer上删除该动画
    • timingFunction: 该属性用于指定一个CAMediaTimingFunction对象,该对象负责控制动画变化的步长。
    • animationDidStart:(CAAnimation*)theAnimation: 该动画开始时将会调用
    • animationDidStop:(CAAnimation*)theAnimation finished:(BOOL)flag: 该动画结束时会调用

    CAMediaTiming:提供的属性和方法

    • duration: 动画继续时间,默认0
    • repeatCount: 动画重复次数 默认0
    • fillMode: 决定当前对象在非active时间段的行为.比如动画开始之前,动画结束之后,有四个值:
      • kCAFillModeForwards:当动画结束后,layer会一直保持着动画最后的状态
      • kCAFillModeBackwards:就是在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始
      • kCAFillModeBoth:动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态.
      • kCAFillModeRemoved :这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态

    注意:如果是一个动画CAAnimation,则需要将其removedOnCompletion设置为NO,要不然fillMode不起作用.


    四。 CATransition控制过渡动画

    • type 属性用于控制动画类型
      • KCATransitionFade:渐隐效果(默认)
      • KCATransitionMoveIn:移入动画
      • KCATransitionPush:推入动画
      • KCATransitionReveal:揭开动画
      • cube :立方体旋转
      • suckEffect :收缩动画
      • oglFlip :翻转
      • rippleEffect : 水波
      • pageCurl : 页面揭开
      • pageUnCurl :放下页面
      • cameraIrisHollowOpen : 镜头打开动画
      • cameraIrisHollowClose : 镜头关闭
    • subyte 属性用于指定动画的移动方向
      • kCATransitionFromRight
      • kCATransitionFromLeft
      • kCATransitionFromTop
      • kCATransitionFromBottom
    • startProgressendProgress 控制动画开始和结束的时间

    示例:(移入动画)

    CATransition *transition = [CATransition animation];
    transition.duration = 2.0f;
    // 使用kCATransitionMoveIn动画
    transition.type = kCATransitionMoveIn;
    // 指定动画方向,从左向右
    transition.subtype = kCATransitionFromLeft;
    [self.view.layer addAnimation:transition forKey:@"animation"];
    

    五。 属性动画(CABasicAnimation、CAKeyframeAnimation)

    CAPropertyAnimation 提供的属性以及方法

    • animationWithKeyPath: 根据参数指定的CALayer属性来进行动画

    5.1 CABasicAnimation

    CABasicAnimation 提供的属性方法

    • fromValue、toValue:分别指定动画属性开始时的属性值和动画属性结束时的属性值

    示例:改变背景颜色

        CABasicAnimation* cocorAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
        CGColorRef beforeColor = self.notiScanLabel.layer.backgroundColor;
        CGColorRef afterColor = c.CGColor;
        
        cocorAnimation.fromValue = (__bridge id)beforeColor;
        cocorAnimation.toValue = (__bridge id)afterColor;
        
        cocorAnimation.duration = 0.8;
        cocorAnimation.removedOnCompletion = true;
        cocorAnimation.fillMode = kCAFillModeForwards;
        [self.notiScanLabel.layer addAnimation:cocorAnimation forKey:@"cocorAnimation"];
    

    5.2 CAKeyframeAnimation

    CAKeyframeAnimation提供的属性方法

    • values : 可以指定动画过程中的多个值

    示例:改变位置

     CAKeyframeAnimation *shakeAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    shakeAnim.values = [NSArray arrayWithObjects:
                       	[NSValue valueWithCGPoint: position1],
    						[NSValue valueWithCGPoint: position2],
                       	[NSValue valueWithCGPoint:self.layer.position],nil];
    shakeAnim.duration = totalInterval ;
    [self.someview addAnimation: shakeAnim forKey:@"shakeAnim"];
  • 相关阅读:
    RESTful-rest_framework版本控制、分页器-第六篇
    RESTful-rest_framework认证组件、权限组件、频率组件-第五篇
    RESTful-rest_framework视图层-第三篇
    RESTful-rest_framework应用第二篇(get、post的序列化与反序列化)
    RESTful-rest_framework应用第一篇
    Flask
    驱动程序分层分离概念_总线驱动设备模型_P
    (转)linux设备驱动之USB数据传输分析 二
    (转)linux设备驱动之USB数据传输分析 一
    USB设备驱动程序(二)
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5279237.html
Copyright © 2020-2023  润新知