UIView绘制原理

self.layer.delegate = self ;这个方法不用写,系统默认会设置delegate为当前view

当调用setNeedsDisplay时候,流程如下
    [self setNeedsDisplay];

    [self.layer setNeedsDisplay];

//.线程上是异步执行,不会阻塞线程,并且在runloop最后一个阶段执行

    [self.layer display];//首先回判断代理是否响应这个displayLayer:方法


    如果响应就进入异步绘制入口(- (void)displayLayer:(CALayer*)layer)  ,

代理负责生成对应的bitmap

设置改bitmap座位layer.contents属性的值


不响应就进入系统绘制流程

系统绘制流程

CALayer creates backingstore

layer 是否有代理layer.delegate方法drawLayer:inContext

没有代理调用系统 CALayer drawInContext:

有代理调用代理方法- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx,如果在里面调用父类方法[super drawLayer:layer inContext:ctx];,就会调用- (void)drawRect:(CGRect)rect。没有调用super drawlayer的话就不会调用drawRect。(需要说明的是如果没有实现 drawRect方法,那么drawLayer:inContext:方法也不会调用)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。