美文网首页UIKit
Core Animation 学习笔记2 - Layer

Core Animation 学习笔记2 - Layer

作者: 扬仔360 | 来源:发表于2017-02-22 14:03 被阅读53次

    包含 CABasicAnimation 的一些简单动画,Spring 后面的再学。

    最近开始忙项目了,停较长一段时间


    6. Layer

    Layer 概述

    Layer 是一个简单的对象,只对外提供一些图像显示方面的内容相关的属性,每一个 UIView 背后都有一个 Layer 层。

    Layer 跟 UIView 是不一样的,主要因为:

    1. Layer 只是一个简单的模型对象,不像 UIView 那么逻辑对象,没有复杂的自动布局和手势识别等。
    2. Layer 预定义了很多可见的特性,这些特性是一系列的呈现在屏幕上的内容的数据,比如边界线、边框颜色、位置、阴影等。
    3. Core Animation 优化了对 layer 的支持,比如缓存,并且直接使用 GPU 进行绘制。

    UIView 之所以复杂,是因为他还负责了 NSAutoLayout 用户交互等复杂的逻辑,但是Layer没有任何逻辑,只是提供了缓存和 GPU 绘制。
    所以 UIView 非常灵活机动,有很多的子类,但是 Layer 子类就非常少,层级更加简单。

    UIView 任何时候都能胜任工作,但是如果要考虑优化和性能的时候就得考虑 Layer 了。

    Core Animation 操作 Layer 同样跟 UIView 一样通过设定起终点的状态以及过度方式来操作,只是在 Layer 中不仅仅可以操作之前的:frame、position、opacity,还有更多属性可以修改。

    6.1 Layer 属性

    定位与尺寸 position size

    • bounds : 改变layer的边界frame
    • positon : 可以理解成 UIView 的 center,具有 x y 两个属性。
    • transform : Layer 的 transform 还可以 3D 变换,修改 scala, 角度 rotate .

    边界 border

    • borderColor : tint 边界颜色
    • borderWidth : 边界宽度
    • borderRadius : 圆角矩形圆角半径

    阴影 shadow

    • shadowOffset: 代表阴影跟Layer的偏移
    • shadowOpacity: 修改这个值让阴影渐进渐出
    • shadowPath: 修改 Layer 的阴影的形状
    • shadowRadius: 让阴影变模糊

    内容 Contents

    最后这些属性控制着最后给 Layer 展示的数据,直接用户看到的一层

    • contents: 修改这个值去分配原生的 TIFF 或 PNG 数据给 Layer 的内容
    • mask: 修改这个值去重建形状跟图像。
    • opacity: 透明度

    UIView 的动画不能指定开始状态,但是 Layer 很多情况下可以指定开始状态。

    6.2 CABasicAnimation

    创建一个 CABasicAnimation 对象:

    然后创建一个 CABasicAnimation 对象,然后添加到 view 的 layer 上,keyPath 用来指定动画的属性,上面提到过的属性都可以作为动画目标属性。

        let flyRight = CABasicAnimation(keyPath: "position.x")
        flyRight.fromValue = -view.bounds.size.width/2
        flyRight.toValue = view.bounds.size.width/2
        flyRight.duration = 0.5
        
    //把动画添加到 layer 上
        heading.layer.add(flyRight, forKey: nil)
    

    当我们这样创建一个 CABasicAnimation 的时候,flyRight 只是一个对象,它跟任何一个 layer 都没有关系。当 add 方法调用的时候,传入绑定 Layer 的是一个它的 copy,并不是我们创建的这个对象本身。

    所以我们可以复用 CABasicAnimation 对象。

    fillMode 动画模式

    使用动画对象的这个属性,让你控制动画在开始到结束的整个流程出现的状态。

    关于 Layer 动画状态的控制,通过 fillMode 变量来控制 layer 起始状态的展示。

    慢如慢出动画的执行阶段
        groupAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
    

    我们可以创建自定义的 CAMediaTimingFunction 对象,通过 init 方法 controlPoints,传入四个贝赛尔曲线的两个控制点的坐标,即可以实现,不赘述。

    动画重复 RepeatCount

    设置动画的重复次数,即结束之后,重复从头开始动画,通过设置 CABasicAnimation 的属性 repeatCount,设置重复的次数。

    另外的一个属性 autoreverses,设置自动逆向播放,动画完成之后,再逆向动画一次。

    通过同时设置这两个参数,可以时间循环逆向播放动画。一轮正逆算 repeat 一次。

    如果设置动画对象的 repeatCount 为 1.5,则动画的第二次动画的逆向动画取消,第二次只播放一次正向动画。

    动画速度 speed

    CABasicAnimation 的参数 speed,可以控制动画的速度,默认值为 1.0f。

    其实:

    动画的实际消耗时间 * speed = duration
    

    单独设置 CABasicAnimation 对象的 speed 之外,还可以直接设置 Layer 的 speed,比如设置 self.view.layer.speed = 2.0,viewController 的 view 之下的所有动画都会以 2.0 的速度播放。

    相关文章

      网友评论

        本文标题:Core Animation 学习笔记2 - Layer

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