
1.jpg
一、Core Animation簡介
- Core Animation,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API,使用它能做出非常炫麗的動畫效果,而且往往是事半功倍。即,使用少量的代碼就可以實(shí)現(xiàn)非常強(qiáng)大的功能。
- Core Animation可以用在Mac OS X和iOS平臺。
- Core Animation的動畫執(zhí)行過程都是在后臺操作的,不會阻塞主線程。
- 要注意的是,Core Animation是
直接作用在CALayer上的,并非UIView。
二、CAAnimation的繼承關(guān)系

Snip20150718_1.png
- 核心動畫中所有類都遵守
CAMediaTiming協(xié)議 - CAAnaimation是個抽象類,不具備動畫效果,必須用它的子類才有動畫效果,
CAAnimationGroup和CATransition才有動畫效果。- CAAnimationGroup是個
動畫組,可以同時進(jìn)行縮放,旋轉(zhuǎn)。 - CATransition是
轉(zhuǎn)場動畫,界面之間跳轉(zhuǎn)都可以用轉(zhuǎn)場動畫。
- CAAnimationGroup是個
- CAPropertyAnimation也是個抽象類,本身不具備動畫效果,只有子類才有,
CABasicAnimation和CAKeyframeAnimation- CABasicAnimation
基本動畫,做一些簡單效果 - CAKeyframeAnimation
幀動畫,做一些連續(xù)的流暢的動畫 - 它有個NSString類型的
keyPath屬性,你可以指定CALayer的某個屬性名為keyPath,并且對CALayer的這個屬性的值進(jìn)行修改,達(dá)到相應(yīng)的動畫效果。比如,指定@"position"為keyPath,就會修改CALayer的position屬性的值,以達(dá)到平移的動畫效果 - 因此,初始化好CAPropertyAnimation的子類對象后,必須先設(shè)置keyPath,搞清楚要修改的是CALayer的哪個屬性,執(zhí)行的是怎樣的動畫
- CABasicAnimation
三、添加步驟
(注意:Xcode5之后不用添加QuartzCore.framework框架和引入主頭文件<QuartzCore/QuartzCore.h>)
- 1.首先得
有CALayer - 2.初始化一個CAAnimation對象,并設(shè)置一些動畫相關(guān)屬性
- 3.通過調(diào)用CALayer的
addAnimation:forKey:方法,增加CAAnimation對象到CALayer中,這樣就能開始執(zhí)行動畫了 - 4.通過調(diào)用CALayer的
removeAnimationForKey:方法可以停止CALayer中的動畫
四、相關(guān)屬性
duration:動畫的持續(xù)時間
repeatCount:重復(fù)次數(shù),
無限循環(huán)可以設(shè)置HUGE_VALF或者MAXFLOATrepeatDuration:重復(fù)時間
removedOnCompletion:默認(rèn)為YES,代表動畫執(zhí)行完畢后就從圖層上移除,圖形會恢復(fù)到動畫執(zhí)行前的狀態(tài)。
如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài),那就設(shè)置為NO,不過還要設(shè)置fillMode為kCAFillModeForwardsfillMode:決定當(dāng)前對象在非active時間段的行為。比如動畫開始之前或者動畫結(jié)束之后
beginTime:可以用來設(shè)置動畫延遲執(zhí)行時間,若想延遲2s,就設(shè)置為CACurrentMediaTime()+2,CACurrentMediaTime()為圖層的當(dāng)前時間
timingFunction:速度控制函數(shù),控制動畫運(yùn)行的節(jié)奏
delegate:動畫代理fillMode屬性值(
要想fillMode有效,最好設(shè)置removedOnCompletion = NO)delegate:動畫代理,用來
監(jiān)聽動畫的執(zhí)行過程
代理對象需要實(shí)現(xiàn)的方法有:(這幾個方法被定義在某個分類中)
@interface NSObject (CAAnimationDelegate)
// 動畫開始執(zhí)行的時候觸發(fā)這個方法
- (void)animationDidStart:(CAAnimation *)anim;
// 動畫執(zhí)行完畢的時候觸發(fā)這個方法
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end