美文网首页iOS开发你需要知道的
UIView绘制原理,异步绘制

UIView绘制原理,异步绘制

作者: 只写Bug程序猿 | 来源:发表于2018-06-22 17:17 被阅读232次

UIView绘制原理

首先看一幅流程图

UIVIew绘制流程图
UIView调用setNeedsDisplay方法后,实际上并没有发生当前视图的绘制工作,而是在之后的某一时机进行绘制工作,为什么会在之后的某一时机进行绘制工作呢?
UIView调用setNeedDisplay之后,系统会调用view对应layersetNeedsDisplay方法,相当于在当前layer上打上了一个脏标记,然后会在当前runloop即将结束的时候调用CALayerdisplay方法,才会真正的进入当前视图的绘制流程当中,所以视图的绘制时机,是在当前runloop即将结束的时候才会开始.

CALayerdisplay方法的内部实现,首先会判断layerdelegete是否响应display方法,如果代理不响应就会进入到系统的绘制流程当中,如果响应,实际上就为我们提供了异步绘制的接口,这样就构成了UIView的绘制原理

系统的绘制流程

同样看一副流程图


系统的绘制流程图

首先CALayer会在内部创建一个backing store(CGContextRef),我们一般在drawRect中可以通过上下文堆栈当中拿到当前栈顶的context.然后layer判断是否有代理,如果没有代理会调用layerdrawInContext方法,如果实现了代理就会调用delegetedrawLayer:inContext方法,这是在发生在系统内部当中的,然后在合适的时机给予回调方法,也就是ViewdrawRect方法.可以通过drawRect方法做一些其他的绘制工作.然后无论哪两个分支,都有calayer上传backing store (最终的位图)到CPU.然后结束系统的绘制流程.

异步绘制

怎么进行异步绘制呢,其实就是基于系统给我们开的口子layer.delegate,如果遵从或者实现了displayLayer方法,我们就可以进入到异步绘制流程当中,在异步绘制的过程当中

  1. 就由delegete去负责生成bitmap位图
  2. 设置改bitmap作为layer.content属性的值

通过一副时序图来了解异步绘制的机制和流程


B1A61DAE-AFF6-4CEB-AB1E-D724FF3BCFFF.png

相关文章

  • 常见面试问题概括

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

  • UIView绘制原理,异步绘制

    UIView绘制原理 首先看一幅流程图 CALayer的display方法的内部实现,首先会判断layer的del...

  • UIView绘制原理&异步绘制

    绘制原理 异步绘制流程

  • UIView的绘制原理、异步绘制

    一.UIView的绘制原理 如上图: 调用[UIView setNeedsDisplay]后, 会调用系统的同名方...

  • iOS UIView 异步绘制

    一、异步绘制原理 在 UIView 中有一个 CALayer 的属性,负责 UIView 具体内容的显示。具体过程...

  • iOS-UIView异步绘制

    1.异步绘制原理 在 UIView 中有一个 CALayer 的属性,负责 UIView 具体内容的显示。具体过程...

  • UIView的异步绘制原理

    UIKit和Pixels 每一个UIKit中的view都有他自己的CALayer。每一个图层都有一个叫像素位图的后...

  • 视图绘制

    本文要点 事件传递视图响应图像显示原理卡顿掉帧原因绘制&异步绘制离屏渲染 先看一下UIView和CALayer区别...

  • UIView的绘制原理

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

  • UI绘制原理和异步绘制

    UIView的绘制原理 说道UIView的绘制原理,我们先来看一张图: 从上面的图,我们可以看到: 1.先调用[...

网友评论

    本文标题:UIView绘制原理,异步绘制

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