UIView与UILayer的关系

我们可能很多人都看过这张图,也能大概知道它们两者的关系

1.首先UIView可以响应事件,Layer不可以.

我们先来看第一个例子

如果真的是这样,那何不用CALayer去代替UIView能?所以答案很显然不是正确的。因为上述代码中的CALayer是放在self.view.layer中去,所以才拥有与UIView看似一样的属性。

我们知道在UIKit中,但凡是与UIResponder直接继承或者间接继承的类都应具有相应用户事件的能力。

下面是源文件中,对于UIView的定义,继承自UIResponder

@interface UIView : UIResponder CALayerDelegate>

而我们再去比较CALayer的定义

@interface CALayer : NSObject

我们发现CALayer上级类是NSObject,为一个基类。那他怎么又可能去对用户的操作做出响应呢?

那么问题来了,既然UIView可以响应事件,UIView中也有一个主CALayer,那到底怎么由怎么样一个过程来让UIView去展示用户能看到的东西的呢?

我们会发现在UIView这个类中它实现了CALayerDelegate,也就是说,当系统想要去绘制图形时,这时候,View会自动调用Delegate的方法去绘制你想要的图形。

包含以下几个方法其中 displayLayer 方法 和 drawLayer 方法如果全部实现的话只会走displayLayer,他们的执行顺序是

layerWillDraw-> displayLayer/drawLayer -> layoutSublayersOfLayer;

如果当前View 有多个Layer 的话 在这4个方法中 写的代码 会在每个layer中绘制。

具体想研究怎么个去精细地去控制这个Layer下篇文章中会详细说明。

你可能感兴趣的:(UIView与UILayer的关系)