搜索
您的当前位置:首页正文

UI绘制的原理

来源:二三娱乐
  • UI绘制的流程图
1.0.jpg

当UIView调用setNeedsDisplay的时候,view会立即调用layer的setNeedsDisplay,此时不会立即绘制,等Runloop休眠退出之前进行绘制

  • 系统的绘制流程
2.0.png

CALayer创建一个位图上下文,查看是否有代理,

  • 有代理的话就去代理里面执行这个方法绘制- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx,并且会回调这个drawRect:方法,在这里面可进行一些自己的绘制

  • 没有代理的话layer会执行这个- (void)drawInContext:(CGContextRef)ctx,最终绘制结果都由CALayer把这个位图提交到GPU去

  • 实际上看文档drawInContext:自己并不绘制,代理做了最终的绘制

  • 异步绘制
//如果layer的delegate能respondsTo下面这个方法会调用异步绘制
- (void)displayLayer:(CALayer *)layer;

代理负责生成对应的bitmap
设置该bitmap作为layer.contents属性的值

3.png

当view调用setNeedsDisplay的时候,CALayer会调用display,如果代理实现了displayLayer:方法的话,就可以在子线程中去进行位图的绘制,完成后返回主线程把位图赋值给layer的contents属性,完成异步绘制。

Top