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的一些界面属性,比如:阴影,圆角大小,旋转等等。

    1 2 3 4viewT.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支持。 参考: 图片引用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非典型技术宅

NavigationBar&tabBar调色那些事儿1. 导航栏调色那些事儿2. 标签栏TableBar那些事儿

1355
来自专栏蜉蝣禅修之道

iOS开发之UIView与CALayer的异同

1184
来自专栏mukekeheart的iOS之旅

iOS学习——核心动画之Layer基础

CALayer我们又称它叫做层。在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这个layer才具有显示的...

1546
来自专栏deepcc

学习js在线html(富文本)编辑器

2.9K7
来自专栏進无尽的文章

UI篇-CATextLayer和 富文本的交融

CATextLayer适用于IOS或者MAC,比UIlablel 和 NSTextView 能做的事很多,可以这样说UIlablel是通过CATextLayer...

2961
来自专栏xx_Cc的学习总结专栏

iOS-核心动画详解之CALayer

3076
来自专栏程序员叨叨叨

手把手教你打造RecyclerView滚动特效

最近开发中遇到这样的需求,recyclerview的item随滚动改变大小和透明度。这个效果看起来挺有动感的,似乎实现起来有点复杂,其实不然,接下来将带领大家手...

1441
来自专栏cloudskyme

MFC自绘按钮的实现

自绘按钮的实现过程 申明自绘属性 进行VM_MESUREITEM事件响应,说明按钮的尺寸 进行VM_DRAWITEM消息的重新响应,说明如何绘制按钮 首先在vc...

3654
来自专栏糊一笑

移动端效果之Swiper

写在前面 最近在做移动端方面运用到了饿了么的vue前端组件库,因为不想单纯用组件而使用它,故想深入了解一下实现原理。后续将会继续研究一下其他的组件实现原理,有兴...

3338
来自专栏xx_Cc的学习总结专栏

iOS-UIButton 全面解析UIButton 的全面解析

3098

扫码关注云+社区

领取腾讯云代金券