self.layer.delegate = self ;這個方法不用寫谈截,系統(tǒng)默認會設(shè)置delegate為當(dāng)前view
當(dāng)調(diào)用setNeedsDisplay時候朝蜘,流程如下
? ? [self setNeedsDisplay];
? ? [self.layer setNeedsDisplay];
//.線程上是異步執(zhí)行憋肖,不會阻塞線程,并且在runloop最后一個階段執(zhí)行
? ? [self.layer display];//首先回判斷代理是否響應(yīng)這個displayLayer:方法
? ? 如果響應(yīng)就進入異步繪制入口(- (void)displayLayer:(CALayer*)layer) ?示弓,
代理負責(zé)生成對應(yīng)的bitmap
設(shè)置改bitmap座位layer.contents屬性的值
不響應(yīng)就進入系統(tǒng)繪制流程
系統(tǒng)繪制流程
CALayer creates backingstore
layer 是否有代理layer.delegate方法drawLayer:inContext
沒有代理調(diào)用系統(tǒng) CALayer drawInContext:
有代理調(diào)用代理方法- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx往产,如果在里面調(diào)用父類方法[super drawLayer:layer inContext:ctx];,就會調(diào)用- (void)drawRect:(CGRect)rect撒犀。沒有調(diào)用super drawlayer的話就不會調(diào)用drawRect福压。(需要說明的是如果沒有實現(xiàn) drawRect方法,那么drawLayer:inContext:方法也不會調(diào)用)