美文网首页
Core Animation 学习笔记 图层树

Core Animation 学习笔记 图层树

作者: David_Cap | 来源:发表于2015-08-28 16:38 被阅读81次

    图层的树状结构

    Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只是Core Animation特性的冰山一角。

    Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中。于是这个树形成了UIKit以及在iOS应用程序当中你所能在屏幕上看见的一切的基础。

    简单的说,UIView是在屏幕上显示的一个矩形块(比如图片,文字或者视频),它封装了拦截类似于鼠标点击或者触摸手势等用户输入,图形处理等。同时在UIView上负责绘制一些图形的操作就是由CALayer 完成的。

    CALayer

    CALayer类在概念上和UIView类似,同样也是一些被层级关系树管理的矩形块,同样也可以包含一些内容(像图片,文本或者背景色),管理子图层的位置。它们有一些方法和属性用来做动画和变换。和UIView最大的不同是CALayer不处理用户的交互。

    CALayer并不清楚具体的响应链(iOS通过视图层级关系用来传送触摸事件的机制),于是它并不能够响应事件。

    而且每个UIView都包含一个CALayer 负责这个UIView的动画处理等。

    UIView 和 CALayer 的平行的层级关系

    每一个UIview都有一个CALayer实例的图层属性,也就是所谓的backing layer,视图的职责就是创建并管理这个图层,以确保当子视图在层级关系中添加或者被移除的时候,他们关联的图层也同样对应在层级关系树当中有相同的操作

    层级关系.jpeg

    也就是说UIView 的指责就是管理自己手下的layer,保证自己消失的时候,顺便把手下也带走。(丧心病狂的老大)

    图层的能力

    如果说CALayer是UIView内部实现细节,那我们为什么要全面地了解它呢?苹果当然为我们提供了优美简洁的UIView接口,那么我们是否就没必要直接去处理Core Animation的细节了呢?

    某种意义上说的确是这样,对一些简单的需求来说,我们确实没必要处理CALayer,因为苹果已经通过UIView的高级API间接地使得动画变得很简单。

    但是这种简单会不可避免地带来一些灵活上的缺陷。如果你略微想在底层做一些改变,或者使用一些苹果没有在UIView上实现的接口功能,这时除了介入Core Animation底层之外别无选择。

    我们已经证实了图层不能像视图那样处理触摸事件,那么他能做哪些视图不能做的呢?这里有一些UIView没有暴露出来的CALayer的功能:

    阴影,圆角,带颜色的边框

    3D变换

    非矩形范围

    透明遮罩

    多级非线性动画

    我们将会在后续章节中探索这些功能,首先我们要关注一下在应用程序当中CALayer是怎样被利用起来的。

    使用图层

    使用图层这个我相信基本大家都CALayer都用过,这里只给一段代码,简单的介绍一下使用吧。

    #import "ViewController.h"
    //必须要包含的头文件 当然也要add 这个框架才行
    #import <QuartzCore/QuartzCore.h>
    @interface ViewController ()
    
    @property (nonatomic, weak) IBOutlet UIView *layerView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        //create sublayer
        CALayer *blueLayer = [CALayer layer];
        blueLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0f);
        blueLayer.backgroundColor = [UIColor blueColor].CGColor;
        //add it to our view
        [self.layerView.layer addSublayer:blueLayer];
    }
    @end
    

    总结

    这一章阐述了图层的树状结构,说明了如何在iOS中由UIView的层级关系形成的一种平行的CALayer层级关系,在后面的实验中,我们创建了自己的CALayer,并把它添加到图层树中。

    参考致谢:

    https://github.com/AttackOnDobby/iOS-Core-Animation-Advanced-Techniques/blob/master/1-%E5%9B%BE%E5%B1%82%E6%A0%91/%E5%9B%BE%E5%B1%82%E6%A0%91.md

    相关文章

      网友评论

          本文标题:Core Animation 学习笔记 图层树

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