Core Animation

一:Core Animation簡介

Core Animation,中文翻譯爲核心動畫,它是一組非常強大的動畫處理API,使用它能做出非常炫麗的動畫效果,而且往往是事半功倍。也就是說,使用少量的代碼就可以實現非常強大的功能。

Core Animation可以用在MacOS X和iOS平臺。

Core Animation的動畫執行過程都是在後臺操作的,不會阻塞主線程。

要注意的是,Core Animation是直接作用在CALayer上的,並非UIView。

核心動畫:如果是xcode5之前的版本,使用它需要先添加QuartzCore.framework和引入對應的框架。

開發步驟:

1.使用它需要先添加 <QuartzCore/QuartzCore.h> 框架和引入主頭文件;

2.初始化一個CAAnimation對象,並設置一些動畫相關屬性;

3.通過調用CALayer的addAnimation:forKey:方法增加CAAnimation對象到CALayer中,這樣就能開始執行動畫了;

4.通過調用CALayer的removeAnimationForKey:方法可以停止CALayer中的動畫。

二:CAAnimation繼承結構

三:CAAnimation——屬性

1.是所有動畫對象的父類,負責控制動畫的持續時間和速度,是個 抽象類 ,不能直接使用,應該使用它具體的子類;

2.屬性說明:

1) duration:動畫的持續時間;

2) repeatCount:重複次數,無限循環可以設置HUGE_VALF或者MAXFLOAT;

3) repeatDuration:重複時間;

4) removedOnCompletion:默認爲YES,代表動畫執行完畢後就從圖層上移除,圖形會恢復到動畫執行前的狀態。如果想讓圖層保持顯示動畫執行後的狀態,那就設置爲NO,不過還要設置fillMode爲kCAFillModeForwards;

5) fillMode:決定當前對象在非active時間段的行爲。比如動畫開始之前或者動畫結束之後;

6) beginTime:可以用來設置動畫延遲執行時間,若想延遲2s,就設置爲CACurrentMediaTime()+2,CACurrentMediaTime()爲圖層的當前時間;

7) timingFunction:速度控制函數,控制動畫運行的節奏;

8) delegate :動畫代理。

四:CAAnimation——動畫填充模式

fillMode屬性值(要想fillMode有效,最好設置removedOnCompletion= NO)

1) kCAFillModeRemoved 這個是默認值,也就是說當動畫開始前和動畫結束後,動畫對layer都沒有影響,動畫結束後,layer會恢復到之前的狀態;

2) kCAFillModeForwards 當動畫結束後,layer會一直保持着動畫最後的狀態;

3) kCAFillModeBackwards 在動畫開始前,只需要將動畫加入了一個layer,layer便立即進入動畫的初始狀態並等待動畫開始;

4) kCAFillModeBoth 這個其實就是上面兩個的合成.動畫加入後開始之前,layer便處於動畫初始狀態,動畫結束後layer保持動畫最後的狀態。


五:CAAnimation——速度控制函數

速度控制函數(CAMediaTimingFunction)

animation.timingFunction=
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];

1) kCAMediaTimingFunctionLinear(線性):勻速,給你一個相對靜態的感覺;

2) kCAMediaTimingFunctionEaseIn(漸進):動畫緩慢進入,然後加速離開;

3) kCAMediaTimingFunctionEaseOut(漸出):動畫全速進入,然後減速的到達目的地;

4) kCAMediaTimingFunctionEaseInEaseOut(漸進漸出):動畫緩慢的進入,中間加速,然後減速的到達目的地。這個是默認的動畫行爲。

下圖展示了前面四種Timing Function的曲線圖,橫座標表示時間,縱座標表示變化量,這點需要搞清楚(並不是平面座標系中xy)。



六:CAPropertyAnimation

1) 是CAAnimation的子類,也是個抽象類,要想創建動畫對象,應該使用它的兩個子類;

2) CABasicAnimation;

3) CAKeyframeAnimation;

4) 屬性說明:keyPath:通過指定CALayer的一個屬性名稱爲keyPath(NSString類型),並且對CALayer的這個屬性的值進行修改,達到相應的動畫效果。比如,指定@“position”爲keyPath,就修改CALayer的position屬性的值,以達到平移的動畫效果。


七:CABasicAnimation——基本動畫

1.屬性說明:

1) keyPath :要改變的屬性名稱(傳字符串);

2) fromValue :keyPath相應屬性的初始值;

3) toValue :keyPath相應屬性的結束值;

4) autoreverses: (默認爲NO) 當你設定這個屬性爲 YES 時,在它到達目的地之後,動畫的返回到開始的值,代替了直接跳轉到 開始的值。

示例


八:CAKeyframeAnimation——關鍵幀動畫

1.關鍵幀動畫,也是CAPropertyAnimation的子類,與CABasicAnimation的區別是:CABasicAnimation只能從一個數值(fromValue)變到另一個數值(toValue),而CAKeyframeAnimation會使用一個NSArray保存這些數值。

NOTICE: CAKeyframeAnimation則可以支持任意多個關鍵幀,關鍵幀有兩種方式來指定:

①使用path或者使用values,path是一個CGPathRef的值,且path只能對CALayer的 anchorPoint 和 position 屬性起作用,且設置了path之後values就不再起效了;

②而values則更加靈活. keyTimes這個可選參數可以爲對應的關鍵幀指定對應的時間點,其取值範圍爲0到1.0,keyTimes中的每一個時間值都對應values中的每一幀.當keyTimes沒有設置的時候,各個關鍵幀的時間是平分的。

1) values :上述的NSArray對象。裏面的元素稱爲“關鍵幀”(keyframe)。動畫對象會在指定的時間(duration)內,依次顯示values數組中的每一個關鍵幀

2) path :代表路徑可以設置一個CGPathRef、CGMutablePathRef,讓圖層按照路徑軌跡移動。path只對CALayer的anchorPoint和position起作用。如果設置了path,那麼values將被忽略

3) keyTimes :可以爲對應的關鍵幀指定對應的時間點,其取值範圍爲0到1.0,keyTimes中的每一個時間值都對應values中的每一幀。如果沒有設置keyTimes,各個關鍵幀的時間是平分的CABasicAnimation可看做是隻有2個關鍵幀的CAKeyframeAnimation。

Values方式 示例



path方式 示例



九:轉場動畫——CATransition


1.CATransition是CAAnimation的子類,用於做轉場動畫,能夠爲層提供移出屏幕和移入屏幕的動畫效果。iOS比Mac OS X的轉場動畫效果少一點


2.UINavigationController就是通過CATransition實現了將控制器的視圖推入屏幕的動畫效果

<1>type:動畫過渡類型

<2>subtype:動畫過渡方向

<3>startProgress:動畫起點(在整體動畫的百分比)

<4>endProgress:動畫終點(在整體動畫的百分比)



十:CAAnimationGroup——動畫組


1.動畫組,是CAAnimation的子類,可以保存一組動畫對象,將CAAnimationGroup對象加入層後,組中所有動畫對象可以同時併發運行


2.屬性說明:

<1>animations:用來保存一組動畫對象的NSArray

<2>默認情況下,一組動畫對象是同時運行的,也可以通過設置動畫對象的beginTime屬性來更改動畫的開始時間。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章