基礎(chǔ)
單獨(dú)的layer
- 不需要附加到 view 上就能直接顯示在屏幕上的單獨(dú)的 layer 有 AVCaptureVideoPreviewLayer 和 CAShapeLayer
- 改變?nèi)魏螌傩跃蜁?huì)觸發(fā)舊值到新值
附加到 view 上的 layer
- 改變屬性隱式動(dòng)畫(huà)的 layer 不起作用,UIView 默認(rèn)情況是禁止 layer 動(dòng)畫(huà),但是在 animation block 中能用
CAAction
- 當(dāng) layer 屬性改變時(shí),layer 都會(huì)尋找合適的action來(lái)實(shí)行這個(gè)改變。layer向它的delegate 發(fā)送 actionForLayer:forKey: 消息找對(duì)應(yīng)的 action。如果是附加到view 上的 layer,當(dāng)它的屬性改變后會(huì)向 view 請(qǐng)求一個(gè)動(dòng)作,如果這個(gè)屬性的改變不是在動(dòng)畫(huà) block 中是不會(huì)有效的。
1 //無(wú)效
2 NSLog(@"outside animation block: %@",
3 [myView actionForLayer:myView.layer forKey:@"position"]);
4 //在block才有效
5 [UIView animateWithDuration:0.3 animations:^{
6 NSLog(@"inside animation block: %@",
7 [myView actionForLayer:myView.layer forkey:@"position"]);
8 }];
9
打印結(jié)果
1 outside animation block: <null>
2 inside animation block: <CABasicAnimation: 0x8c2ff10>
對(duì)于 view 中的 layer 來(lái)說(shuō)只會(huì)進(jìn)行到搜索 action 這一步,但是對(duì)于單獨(dú)的 layer 還有其它四個(gè)步驟要完成,詳情見(jiàn) CALayer 的官方文檔對(duì) actionForKey 的說(shuō)明。