UIView与CALayer

UIView和CALayer是什么关系?

创建UIView对象时,UIView内部会自动创建一个层(CALayer对象),通过UIView的layer属性可以访问这个层。当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图渲染,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会将层拷贝到屏幕上,于是就完成了UIView的显示

UIView相比CALayer最大区别是UIView继承自UIResponder,可以响应用户事件,而CALayer不可以;UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。

UIView本身,更像是一个CALayer的管理器,访问它的和绘图、坐标相关的属性,如frame,bounds等,实际上内部都是访问它所在CALayer的相关属性

UIView和CALayer是相互依赖的关系。UIView依赖CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。

高级:UIView的layer树形在系统内部被系统维护着三份copy

逻辑树:就是代码里可以操纵的,例如更改layer的属性(阴影,圆角等)就在这一份

动画树:这是一个中间层,系统正是在这一层上更改属性,进行各种渲染操作

显示树:这棵树的内容是当前正被显示在屏幕上的内容

这三棵树的逻辑结构都是一样的,区别只有各自的属性

常用:向UIView的layer上添加子layer,来使目标View上敷上一层黑色的透明薄膜。

CALayer *grayCover = [[CALayer alloc]init];

grayCover.backgroudColor = [[UIColor blackColor]colorWithAlphaComponent:0.3].CGColor;

[self.layer addSubLayer: grayCover];

你可能感兴趣的:(UIView与CALayer)