UIView和CALayer是什么关系?

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];

你可能感兴趣的:(iOS开发)