-
UI绘制的流程图
当UIView调用setNeedsDisplay的时候,view会立即调用layer的setNeedsDisplay,此时不会立即绘制,等Runloop休眠退出之前进行绘制
-
系统的绘制流程
CALayer创建一个位图上下文,查看是否有代理,
-
有代理的话就去代理里面执行这个方法绘制- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx,并且会回调这个drawRect:方法,在这里面可进行一些自己的绘制
-
没有代理的话layer会执行这个- (void)drawInContext:(CGContextRef)ctx,最终绘制结果都由CALayer把这个位图提交到GPU去
-
实际上看文档drawInContext:自己并不绘制,代理做了最终的绘制
-
异步绘制
//如果layer的delegate能respondsTo下面这个方法会调用异步绘制
- (void)displayLayer:(CALayer *)layer;
3.png代理负责生成对应的bitmap
设置该bitmap作为layer.contents属性的值
当view调用setNeedsDisplay的时候,CALayer会调用display,如果代理实现了displayLayer:方法的话,就可以在子线程中去进行位图的绘制,完成后返回主线程把位图赋值给layer的contents属性,完成异步绘制。