美文网首页知识点
iOS的UI绘制原理&系统/异步绘制流程

iOS的UI绘制原理&系统/异步绘制流程

作者: 宋唐不送糖 | 来源:发表于2021-07-20 08:37 被阅读0次

UIView的绘制原理

当我们调用UIView的setNeedsDisplay方法以后,实际上并没有立刻发生当前视图的绘制工作,而是在之后的某一时机才会进行当前视图的绘制。为什么没有立刻发生当前视图的绘制工作?(因为到当前runloop将要结束的时候,才会开始介入到UI视图的绘制流程中)

1.当调用UIView的setNeedsDisplay后,系统会立刻调用view->layer的同名方法[view.layer setNeedsDisplay],之后相当于在layer上面打上了一个脏标记
2.然后在当前runloop将要结束的时候,才会调用CALayer的display函数方法,然后才进入到当前视图的真正绘制工作的流程当中。
3.CALayer的display方法,在内部会首先判断layer的delegate是否响应displayLayer这个方法。若不响应,则系统开始绘制流程。若响应,则开始系统异步绘制流程。

系统绘制流程

1.首先CALayer内部会创建一个CGContextRef。在drawRect方法中,可以通过上下文堆栈当中取出这个context,拿到的就是当前控件或者说视图的上下文或者说是backing store。
2.然后layer会判断它是否有代理,若没有,则调用CALayer的drawInContext。
3.若有则调用代理方法,然后做当前视图的绘制工作(这一步发生在系统内部当中),再在合适的时机,基于drawRect回调方法。
4.drawRect默认操作是什么都不做,而之所以有这个接口,就是为了让我们在系统绘制之上,可以做些自定义的绘制工作。
5.最后再由CALayer上传对应的backing store给GPU,这里的backing store我们可以理解为位图。

异步绘制流程

- [layer.delegate displayLayer:]

基于layer的delegate,如果实现了displayLayer方法,就可以进入到异步绘制流程当中。
1.在异步绘制过程中, 需要代理去负责生成对应的bitmap。
2.设置该bitmap作为layer.contents属性的值。

异步绘制的机制和流程

左侧是主队列,右侧是全局并发队列。
假如在某一时机调用了setNeedsDiaplay方法后
1.在当前runloop将要结束的时候,会有系统调用视图所对应layer的display方法。
2.如果代理实现了displayLayer方法,会调用这个代理的displayLayer这个方法。
3.然后通过子线程的切换,我们会在子线程中去做位图的绘制,此时主线程可以去做些其他的工作。
4.然后再回到主队列中,提交这个位图,设置给CALayer的contents属性。

子线程的绘制

1.通过CGBitmapContextCreat方法,来创建一个位图的上下文。
2.通过CoreGraphic的相关API,可以做当前UI控件的一些绘制工作。
3.之后通过CGBitmapContextCreatImage方法,根据所绘制的上下文,生成一张CGImage图片。

相关文章

  • iOS的UI绘制原理&系统/异步绘制流程

    UIView的绘制原理 当我们调用UIView的setNeedsDisplay方法以后,实际上并没有立刻发生当前视...

  • UIView绘制原理&异步绘制

    绘制原理 异步绘制流程

  • 常见面试问题概括

    UI视图相关 *TableView重用机制? 答: *视图绘制原理?如何实现异步绘制? 答:UIView绘制原理 ...

  • iOS体系

    UI视图 UITableView 事件传递&视图响应 图像显示原理 UI卡顿、掉帧 UI绘制原理/异步绘制 离屏渲...

  • # UI视图相关

    UI视图相关 UITableView 事件传递&视图响应 图像显示原理 卡顿&掉帧 绘制原理&异步绘制 离屏渲染 ...

  • UI视图

    UI视图考点: UITableView相关 事件传递&视图响应 图像显示原理 卡顿&掉帧 绘制原理&异步绘制 离屏渲染

  • iOS面试必看

    01UI视图 事件传递机制UI绘制原理异步绘制原理流式页面的性能优化离屏渲染 02OC语言 KVOKVC分类关联对...

  • 2021-06-19

    UI试图相关问题 大纲 UITableView 相关 事件传递&视图响应 图像显示原理 卡顿&掉帧 异步绘制&绘制...

  • iOS开发笔记-绘制原理和异步绘制

    了解iOS的绘制原理可以让你在自定义绘制内容时更得心应手,理解掉帧原理和异步绘制原理,让你的面试得心应手。http...

  • UIView的绘制原理

    UIView流程: UIView的 系统的绘制流程 异步绘制 需要代理负责生成对应的bitmap设置该bitmap...

网友评论

    本文标题:iOS的UI绘制原理&系统/异步绘制流程

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