iOS動畫 屬性屬性解析

斯人如是丶發表於2016-05-11

CABasicAnimation和CAKeyframeAnimation繼承自CAPropertyAnimation,CAPropertyAnimation繼承自CAAnimation,CAAnimation實現了CAMediaTiming協議。

CAMediaTiming協議屬性解析:

  • duration:動畫的持續時間
  • repeatCount:動畫的重複次數
  • repeatDuration:動畫的重複時間
  • removedOnCompletion:預設為YES,代表動畫執行完畢後就從圖層上移除,圖形會恢復到動畫執行前的狀態。如果想讓圖層保持顯示動畫執行後的狀態,那就設定為NO,不過還要設定fillMode為kCAFillModeForwards。
  • fillMode:決定當前物件在非active時間段的行為。比如動畫開始之前,動畫結束之後。
  • kCAFillModeRemoved:這個是預設值,也就是說當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到之前的狀態。
  • 
kCAFillModeForwards:當動畫結束後,layer會一直保持著動畫最後的狀態。
  • kCAFillModeBackwards:在動畫開始前,你只要將動畫加入了一個layer,layer便立即進入動畫的初始狀態並等待動畫開始.你可以這樣設定測試程式碼,將一個動畫加入一個layer的時候延遲5秒執行.然後就會發現在動畫沒有開始的時候,只要動畫被加入了layer,layer便處於動畫初始狀態 
。
  • kCAFillModeBoth:這個其實就是上面兩個的合成.動畫加入後開始之前,layer便處於動畫初始狀態,動畫結束後layer保持動畫最後的狀態。
  • beginTime:可以用來設定動畫延遲執行時間,若想延遲2s,就設定為CACurrentMediaTime() + 2,                        CACurrentMediaTime():圖層的當前時間。
  • timeOffset:這個timeOffset可能是這幾屬性中比較難理解的一個,官方的文件也沒有講的很清楚. local time也分成兩種一種是active local time 一種是basic local time。timeOffset則是active local time的偏移量. 你將一個動畫看作一個環,timeOffset改變的其實是動畫在環內的起點,比如一個duration為5秒的動畫,將timeOffset設定為2(或者7,模5為2),那麼動畫的執行則是從原來的2秒開始到5秒,接著再0秒到2秒,完成一次動畫.
  • speed:speed屬性用於設定當前物件的時間流相對於父級物件時間流的流逝速度,比如一個動畫beginTime是0,但是speed是2,那麼這個動畫的1秒處相當於父級物件時間流中的2秒處. speed越大則說明時間流逝速度越快,那動畫也就越快.比如一個speed為2的layer其所有的父輩的speed都是1,它有一個subLayer,speed也為2,那麼一個8秒的動畫在這個執行於這個subLayer只需2秒(8 / (2 * 2)).所以speed有疊加的效果。

相關文章