Categories: 技术原创

iOS学习笔记:Cocoa中视图和Layer的区别与联系

1. Cocoa中视图和Layer都是树形结构。视图可以处理事件,例如鼠标点击和手势触控,视图在层级中可以相互嵌套,一个视图可以管理它的所有子视图。Layer也可以树形嵌套,父Layer也可以管理子Layer的位置等属性,但Layer不处理用户的交互,所以Layer并不清楚具体的响应链(虽然Layer提供了一些方法判断一个触控点是否在图层内,但这属于图层几何学范畴)。

2. 每个视图都有一个CALayer实例的涂层属性,视图的职责就是创建和管理这个图层,以确保当子视图在层级关系中添加或者被移除的时候,他们关联的图层也同样对应在层级关系树当中有相同的操作。

3.为什么要基于UIView(NSView)提供两个平行的层级关系呢,为什么不用一个简单的层级来处理所有事情呢?
原因在于要做职责分离,这样能避免很多的重复代码,虽然Mac上的鼠标点击和手机的触控很相似,但是有本质的区别,这也是为什么区别了NSView和UIView,CALayer却公用一个的原因。

4.虽然图层不能处理交互事件,视图也不能处理一些高级的显示效果,比如
阴影,圆角,带颜色的边框
3D变换
非矩形范围
透明遮罩
多级非线性动画 等

5.四个层级树,图层树,视图树。呈现树和渲染树暂未学习,后续了解。

龚杰洪

Recent Posts

GOLANG面试八股文-并发控制

背景 协程A执行过程中需要创建…

10 月 ago

MYSQL面试八股文-常见面试问题和答案整理二

索引B+树的理解和坑 MYSQ…

10 月 ago

MYSQL面试八股文-InnoDB的MVCC实现机制

背景 什么是MVCC? MVC…

10 月 ago

MYSQL面试八股文-索引类型和使用相关总结

什么是索引? 索引是一种用于加…

10 月 ago

MYSQL面试八股文-索引优化之全文索引(解决文本搜索问题)

背景:为什么要有全文索引 在当…

10 月 ago