Layer 動(dòng)畫(huà)

基礎(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ō)明。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容