UIView与CALayer区别

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

  • UIView相比CALayer最大区别是UIView继承自UIResponder,可以响应用户事件,而CALayer不可以,CALayer继承于 NSObject;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];

应用

CALayer 功能很强大除了基本用于边框角阴影等,在一些特效方面有很大作用比如展示控件3D效果、遮盖效果、渐变、粒子等

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