这是高级考察点。
1、UIview绘制原理步骤如下:
其中view.layer调用setNeedsDisplay方法之后只是给当前layer打上了一个脏标记,然后在当前runloop将要结束时调用layer的dispaly方法,然后进入当前视图真正的绘制流程中。
2、系统绘制流程如下
在layer内部会创建一个backing store,即CGContextRef(在drawrect方法中可以通过堆栈获取该对象);drawrect函数默认是不做任何事情的,重写之后就可以在系统绘制之上做一些自定义工作。
3、异步绘制
如何实现异步绘制呢?首先layer.delegate实现displayLayer方法;然后layer.delegate在displayLayer方法中生成bitmap;最后设置bitmap作为layer.contents属性的值。
异步绘制的时序图流程如下: