UI绘制原理和异步绘制

2020-02-25  本文已影响0人  修_没毅力没心情
UIView绘制原理

调用setNeedsDispaly时候,实际上是这个view的layer调用setNeedsDispaly方法,之后相当于在这个layer上打上一个脏标记,然后并没有立即发生当前视图的绘制工作,而是在当前runloop快要结束的时候调用CALayer的display方法,进入到当前视图真正的绘制工作的流程当中。

原因是要减少绘制次数,提升性能,所以要在当前runloop快要结束的时候调用CALayer的display方法。

然后代理必须至少实现两个方法的其中一个,如果都实现,则调用displayLayer方法。

系统绘制流程

原理图中的系统绘制流程就如上图所示,图中的backing store可以理解为要上传的位图,由CALayer传给GPU。

关于如何实现异步绘制。

我们基于图1中的[layer.delegate displayLayer:]方法有以下两点:

-代理负责生成对应的bitmap。

-设置该bitmap作为layer.contents属性的值。

异步绘制原理时序图

通过上面的时序图来了解异步绘制。

通过子线程的切换,借助global queue,在子线程中进行bitmap的绘制,此时主线程可以做其他的工作。等子线程绘制位图完毕,再回到主队列中提交位图,设置给CALayer的contents属性,完成一个空间的异步绘制过程。

上一篇 下一篇

猜你喜欢

热点阅读