UIView和CALayer的那些事儿

  • 万剑归宗,UIView和CALayer都是的祖宗都是NSObjet。

继承结构

  • UIView的继承结构为: UIResponder : NSObject。

    • UIResponder是用来响应事件的,也就是UIView可以响应用户事件
  • CALayer的继承结构为: NSObject

    • 直接从 NSObject继承,因为缺少了UIResponder类,所以CALayer悲催的不能响应任何用户事件。
  • UIView是视图的基类,UIViewController是视图控制器的基类,,UIResponder是表示一个可以在屏幕上响应触摸事件的对象;

所属框架

  • UIView是在 /System/Library/Frameworks/UIKit.framework中定义的
    • UIKit主要是用来构建用户界面,并且是可以响应事件的(源于UIView的父类UIResponder)
    • UIView是用来显示内容的,可以处理用户事件
  • CALayer是在/System/Library/Frameworks/QuartzCore.framework定义的。
    • CALayer作为一个低级的,可以承载绘制内容的底层对象出现在该框架中。
    • CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。

作用机制

  • 当UIView需要显示的时候,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上(CALayer上),系统将图层拷贝到屏幕上,完成UIView的显示。
    • 通过操作这个CALayer对象,可以很方便的调整UIView的一些界面属性,比如:阴影,圆角大小,旋转等等。
viewT.layer.cornerRadius = 10;//设置半径
viewT.layer.borderWidth = 10;//设置边框的宽度,当然可以不要
viewT.layer.borderColor = [[UIColor redColor] CGColor];//设置边框的颜色
viewT.layer.masksToBounds = YES;//设为NO去试试
  • 所以UIView相比CALayer最大区别是UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。
  • UIView和CALayer是相互依赖的关系。UIView依赖与CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer实现,添加了响应事件的能力。
  • UIView来自CALayer,高于CALayer,是CALayer的高层实现与封装。UIView的所有特性来源于CALayer支持。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 12,720评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,536评论 5 13
  • 前言 前面发了一篇iOS 面试的文章,在说到 UIView 和 CALayer 的区别和联系的时候,被喵神指出没有...
    Mz楓阅读 4,196评论 0 4
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,406评论 0 1
  • UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以...
    飘金阅读 3,073评论 0 1

友情链接更多精彩内容