美文网首页iOS 相关
iOS相关知识(八)--UIView、CAlayer、UIRes

iOS相关知识(八)--UIView、CAlayer、UIRes

作者: 奋斗的小马达 | 来源:发表于2021-10-19 11:04 被阅读0次

UIView与CAlayer

两者之间的关系

每一个uiview都有一个默认的支持图层layer,UIView负责创建并且管理这个图层。实际上 UIView之所以能够显示,就是因为它里面有这个一个层,才具有显示的功能。UIView仅仅是对它的一层封装,实现了CALayer的delegate,提供了处理事件交互的具体功能,还有动画底层方法的高级API。可以说CALayer是UIView的内部实现细节

两者之间的区别

第一:CAlayer继承与NSObject 没有响应事件 UIView继承与UIResponder有响应事件 这也是两者最大的区别
第二:一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame
第三:UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制
第四:在做 iOS 动画的时候,修改非 RootLayer的属性(譬如位置、背景色等)会默认产生隐式动画,而修改UIView则不会。

注解:每一个UIView内部都默认关联着一个CALayer,我们可用称这个Layer为Root Layer(根 层) 所有的非Root Layer,也就是手动创建的CALayer对象,都存在着隐式动画。

UIResponder 事件传递与响应

先看图:


image.png

事件的传递:寻找事件的第一响应者

当一个事件发生后,事件会从父控件传给子控件,也就是说由
硬件 -> 系统 -> UIApplication -> UIWindow -> SuperView -> SubView的过程

事件的响应:一旦事件的第一响应者确定了,这个事件所处的响应链就确定了

1、 首先由 view 来尝试处理事件,如果他处理不了,事件将被传递到他的父视图 superview
2、superview 也尝试来处理事件,如果他处理不了,继续传递他的父视图 UIViewcontroller.view
3、UIViewController.view 尝试来处理该事件,如果处理不了,将把该事件传递给 UIViewController
4、UIViewController 尝试处理该事件,如果处理不了,将把该事件传递给主窗口 Window
5、主窗口 Window 尝试来处理该事件,如果处理不了,将传递给应用单例 Application
6、如果 Application 也处理不了,则该事件将会被丢弃

事件的传递和响应的区别?

事件的传递是从上到下(父控件到子控件),事件的响应是从下到上(顺着响应者链条向上传递:子控件到父控件。

参考:https://juejin.cn/post/6844903593682665479

相关文章

网友评论

    本文标题:iOS相关知识(八)--UIView、CAlayer、UIRes

    本文链接:https://www.haomeiwen.com/subject/lzfaoltx.html