iiOS 底层原理 - Uiview 与 Calyer 相关视图知识

it2024-04-19  2

图像显示原理

1. UIView 和 CALayer的区别

view是layer的代理对象;view负责管理layer,layer负责渲染;

view初始化的时候默认会创建一个layer;设置view的frame和bounds等内部其实是修改layer对应属性。

两者最明显的区别是View可以接受并且处理事件,而Layer不可以。所有从UIView派生出来的UIKit类,都直接或者间接的继承自UIResponder类,所以都会有响应事件。而CALayer直接继承NSObject,并没有相应的处理事件的接口。

总结:

每个UIView内部都有一个CALayer在背后提供内容的绘制和显示,并且UIView的尺寸样式都由内部的Layer所提供.两者都有树状层级结构,layer内部有SubLayers,View内部有SubViews,但是Layer比View多了个AnchorPoint在View显示的时候,UIView作为Layer的CALayerDelegate,View的显示内容由内部的CALayer的display.CALayer是默认修改属性支持隐士动画的,在给UIView的Layer做动画的时候,View作为Layer的代理,Layer通过actionForLayer: forKey: 向View请求相应的action(动画行为)Layer内部维护者三层, presentLayer Tree(动画树) modeLayer Tree(模型树) Render Tree(渲染树), 在做iOS动画的时候,我们修改动画的属性,在动画的其实是Layer的presentLayer的属性值,而最终展示在界面上的其实是提供View的modelLayer两者最明显的区别是View可以接受并且处理事件,而Layer不可以。(CALayer没有响应链,不能监听点击,触摸等等事件.)

UIButton 的父类是什么?UILabel 的父类又是什么?

UIButton -> UIControl -> UIView -> UIResponderUILabel -> UIView -> UIResponder

如何暂停一个 UIView 中正在播放的动画?暂停后如何恢复?

记录时间,修改 layer的速度 和 timeoffset

setNeedsDisplay 和 layoutIfNeeded 两者是什么关系?

setNeedsDisplay 是给当前的视图做了标记。layoutIfNeeded 查找是否有标记,如果有标记及立刻刷新。

UI绘制原理

资料推荐

如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群1012951431来获取一份详细的大厂面试资料为你的跳槽多添一份保障。

最新回复(0)