之前在動畫學習一中總結了CABascicAnimation
的基本用法,這次來總結一下CAKeyframeAnimation
的簡單使用。
簡介
CABascicAnimation
是核心動畫中的幀動畫,它提供了按照指定的一系列值進行動畫的方法,效果就好比是拍電影一樣,導演指定好每一個動作,然后演員就會按照指定的動作進行。
屬性
-
values
: 是許多值組成的數組用來進行動畫的。這個屬性比較特別,只有在path
屬性值為nil
的時候才有作用 -
path
:路徑,可以指定一個路徑,讓動畫沿著這個指定的路徑執行。 -
cacluationMode
:在關鍵幀動畫中還有一個非常重要的參數,那便是calculationMode
,計算模式.其主要針對的是每一幀的內容為一個座標點的情況,也就是對anchorPoint
和position
進行的動畫.當在平面座標系中有多個離散的點的時候,可以是離散的,也可以直線相連后進行插值計算,也可以使用圓滑的曲線將他們相連后進行插值計算。
-
kCAAnimationLinear
:calculationMode
的默認值,自定義控制動畫的時間(線性)可以設置keyTimes
,表示當關鍵幀為座標點的時候,關鍵幀之間直接直線相連進行插值計算; -
kCAAnimationDiscrete
: 離散的,就是不進行插值計算,所有關鍵幀直接逐個進行顯示; -
kCAAnimationPaced
: 節奏動畫自動計算動畫的運動時間,使得動畫均勻進行,而不是按keyTimes
設置的或者按關鍵幀平分時間,此時keyTimes
和timingFunctions
無效; -
kCAAnimationCubic
: 對關鍵幀為座標點的關鍵幀進行圓滑曲線相連后插值計算,對于曲線的形狀還可以通過;tensionValues
,continuityValues
,biasValues
來進行調整自定義,這里的數學原理是Kochanek–Bartels spline
,這里的主要目的是使得運行的軌跡變得圓滑,曲線動畫需要設置timingFunctions
; -
kCAAnimationCubicPaced
: 看這個名字就知道和kCAAnimationCubic
有一定聯系,其實就是在kCAAnimationCubic
的基礎上使得動畫運行變得均勻,就是系統時間內運動的距離相同,此時keyTimes
以及timingFunctions
也是無效的。
keyTimes
:一個包含若干NSNumber
對象值的數組,用來區分動畫的分割時機。值得注意的是,這些NSNumber
對象的浮點型值在0.0~1.0
之間。里面的值后一個比前一個要大或者相等。最好的結果是這個數組中的值和values
里面的值或者path
控制的值對應,否則可能會出現不了你想要的結果。屬性為應用在每一關鍵幀指定應用到每一個關鍵幀上的計時器。該屬性只在calculationMode
屬性被設置為kCAAnimationLinear
,kCAAnimaitonDiscrete
,kCAAnimationCubic
時被使用。它不使用在節奏動畫中。keyTimes
定義了應用在每一關鍵幀的時間點。所有中間值的定時由定時函數控制,定時函數允許你對各個部分應用緩入或緩出曲線定時。如果你不指定任何定時函數,動畫將會是線性的rotationMode
: 旋轉樣式
-
kCAAnimationRotateAuto
: 根據路徑自動旋轉 -
kCAAnimationRotateAutoReverse
: 根據路徑自動翻轉
動畫效果展示
CAKeyframeAnimation.gif
總結
以上簡單總結了一下CAKeyframeAnimation
的特有屬性,對于CABasicAnimation
的一些屬性他同樣擁有,這里就不再一一贅述。
示例demo