基礎(chǔ)
單獨(dú)的layer
- 不需要附加到 view 上就能直接顯示在屏幕上的單獨(dú)的 layer 有 AVCaptureVideoPreviewLayer 和 CAShapeLayer
- 改變?nèi)魏螌傩跃蜁?huì)觸發(fā)舊值到新值
附加到 view 上的 layer
- 改變屬性隱式動(dòng)畫的 layer 不起作用,UIView 默認(rèn)情況是禁止 layer 動(dòng)畫,但是在 animation block 中能用
CAAction
- 當(dāng) layer 屬性改變時(shí),layer 都會(huì)尋找合適的action來實(shí)行這個(gè)改變。layer向它的delegate 發(fā)送 actionForLayer:forKey: 消息找對應(yīng)的 action。如果是附加到view 上的 layer,當(dāng)它的屬性改變后會(huì)向 view 請求一個(gè)動(dòng)作,如果這個(gè)屬性的改變不是在動(dòng)畫 block 中是不會(huì)有效的。
1 //無效
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>
對于 view 中的 layer 來說只會(huì)進(jìn)行到搜索 action 這一步,但是對于單獨(dú)的 layer 還有其它四個(gè)步驟要完成,詳情見 CALayer 的官方文檔對 actionForKey 的說明。