美文网首页
核心动画知识点总结

核心动画知识点总结

作者: Shawn_ | 来源:发表于2016-01-26 20:58 被阅读111次

    核心动画

    • CAlayer
    • 图层颜色都是CGColor
    • 每个View都有涂层
      • 系统帮你创建的层是主/根层
    • 每个层都有个存放内容的层,跟主层是==平级==,在最外层显示

    • UIImageView

      • 默认UIImageView的图片不是显示到主层的子层中,放在内容层上
        UIView直接修改layer,可以修改里面的内容;UIImageView要修改根层,因为里面的内容是放在layer中的一个contents中的一个属性中
        TableView 的sale,不要直接设置layer来进行裁剪属性,这样会影响性能下降
    • 正方形可以通过修改圆角半径

    • 长方形的时候不能设置圆角变成圆

      • 做动画的时候,尽量不要使用修改圆角半径做动画(一直保持圆形,通过裁剪)
      • 可以直接设置主层的边款和颜色

    CALayer形变

    • 形变是3D效果

    • 模糊半径

      //设置模糊半径
        self.xxx.layer.shadowRadius = 0;
      
    • 设置边框的宽度是往里走的

     self.redView.layer.borderWidth = 3;
    

    ACLayer的疑惑

    • UIKit只能在iOS中使用
    • 主要是为了跨平台

    • UIView和CALayer的选择
      • UIView 多了事件处理功能
      • CALayer不能处理用户的触摸事件

    position和anchorePoint

    • position
    • positon 相当于View中的center
    • 是用来设置CALayer在父层中的位置
    • 父类左上角为原点
    • anchorePoint

    • 成为锚点 定位点

      • 决定CALayer身上哪个点会在position属性所指的位置
      • 以自己的左上角为原点
      • 默认值是(0.5,0.5)
      • anchorePoint定位到position点的位置
      • 这两个属性的点一直保持重合
      • 无论设置position还是anchorePoint位置都会发生变化
      • 取值范围 0 ~1 , 默认值(0.5,0.5)
      • UIView的Center就是它内部layer的Position

    隐式动画

    • 事务:
      • 开启事务
      • 设置时长
    • 提交事务
    • 手动创建的CALayer对象,都存在着隐式动画(非根层)
    • 判断是否是可动画属性(Animatable)
    • 根层没隐式动画.

    时钟

    • 最短路径,两边路径一样,默认逆时针旋转
    • 所有的旋转和缩放都是绕着锚点进行的
    • 在系统头文件,看见位移的符号就可以用 | 的方式来操作
    • 需要设置锚点
      • 默认一个控件或者layer是绕着锚点旋转
      • 算出旋转的度数
    • 代码实现构建思路
      • 导入钟表图片
      • 添加控件 (秒 分 时);
      • 指针不停的转动,用到定时器
      • 角度转弧度
      • 每分钟转时针也要转一点 30/60 每分钟 时针转的度数
      • 尖尖的感觉 可以设置圆角半径

    core Animation (核心动画)

    • 跨平台
      • 在后台操作,不会阻塞主线程
      • 直接作用在CALayer上,不是 UIView
    • 核心动画继承结构


      核心动画继承结构
    • 动画功能
      • CAAnimationGroup
      • CATransition(转产动画)使用比例非常大
      • CAPropertyAnimation(子类有具体功能)
        • CABasicAnimation(单个)
        • CAKeyframeAnimation (多个)
          • 可以让动画根据路径走
    • 核心动画为什么搞这么多对象
      • 为了更加面向对象

    CABasicAnimation

    • 动画的本质就是修改图层的某些属性
      • 核心动画,利用核心动画修改Layer的某些属性
    • 创建核心动画
    • 描述修改Layer的哪个属性
    • 属性keyPath
    • 自动提示宏
    //直接在宏的参数前添加 #,就可以生成这个参数的c的字符串
    #define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPaht))
    //描述要修改layer的属性
    
    • 修改Layer属性的值

      • fromeValue (动画的起点)
      • toValue(动画的终点)
    • 取消反弹

       1. 在动画完成的时候,不要把动画销毁
         2. 动画永远保持最新的状态(填充模式)c语言的宏都是k开头;
      

    CAKeyframeAnimation

    • 图标抖动效果(2维动画)
    anim.keyPath =@"transform.rotation";
    
    //自动反转(怎么样去,那么动画怎么回来)
    anim.autoreverses = YES ;
    
    • 直接传值
      • 角度转换成弧度
      • 定义成个宏(然后传入参数)
      • 帧动画可以多个值进行传递
      • 还可以传递路径 (根据路径进行移动)
        • 创建帧动画对象
        • 描述修改layer的属性
        • 绘制路径
        • 添加路径到动画路径中去
        • 将动画添加到layer中

    CATransition (转场动画)

    • 需求(图片轮转播放)
    • 只要切换界面,都可以使用转场动画
    • 谁切换界面,就添加到谁上面
      • 点击屏幕切换图片
      • 图片名字为变量,利用static,只用初始化一次
    • 界面切换的代码
      • 必须都放在一起
    • 转场动画的代码
      • 转场动画

      • 转场类型

      • 转场动画代码必须和界面切换的代码放在一起

      • 小细节

        //通过KVC一般是做快速旋转,平移,缩放
        [self.imageV.layer setValue:value forKeyPath@"transform.rotation.x"];
        
        //用事务关闭隐式动画
        [CATransaction setDisableActions:YES];
        

    相关文章

      网友评论

          本文标题:核心动画知识点总结

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