CALayerDelegate
包含以下幾個(gè)方法其中 displayLayer 方法 和 drawLayer 方法如果全部實(shí)現(xiàn)的話只會(huì)走displayLayer窃页,他們的執(zhí)行順序是
layerWillDraw->displayLayer/drawLayer->layoutSublayersOfLayer;
如果當(dāng)前View 有多個(gè)Layer 的話 在這4個(gè)方法中 寫(xiě)的代碼 會(huì)在每個(gè)layer中繪制鱼鸠。
- (void)displayLayer:(CALayer *)layer;
和上一個(gè)方法類(lèi)似
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
//開(kāi)始繪制時(shí)候 執(zhí)行
- (void)layerWillDraw:(CALayer *)layer
//最后執(zhí)行
- (void)layoutSublayersOfLayer:(CALayer *)layer;
//再添加 或刪除 layer 層的時(shí)候回調(diào)用這個(gè)方法 ,可以按照分類(lèi)寫(xiě)動(dòng)畫(huà)
- (nullable id)actionForLayer:(CALayer *)layer forKey:(NSString *)event;
eg:
-(id)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
NSLog(@"actionForLayer %@",event);
CATransition *anim=nil;
if([event isEqualToString:@"onOrderIn"]){
anim=[CATransition animation];
anim.duration=2;
anim.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
anim.type=@"cube";
anim.subtype=kCATransitionFromRight;
}
return anim;
}