![1.jpg](http://upload-images.jianshu.io/upload_images/650137-782ccc531e2e94d4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
1.jpg
一廊敌、Core Animation簡介
- Core Animation,中文翻譯為核心動畫湿右,它是一組非常強(qiáng)大的動畫處理API,使用它能做出非常炫麗的動畫效果罚勾,而且往往是事半功倍毅人。即,使用少量的代碼就可以實現(xiàn)非常強(qiáng)大的功能尖殃。
- Core Animation可以用在Mac OS X和iOS平臺丈莺。
- Core Animation的動畫執(zhí)行過程都是在后臺操作的,不會阻塞主線程送丰。
- 要注意的是缔俄,Core Animation是
直接作用在CALayer上
的,并非UIView蚪战。
二牵现、CAAnimation的繼承關(guān)系
![Snip20150718_1.png](http://upload-images.jianshu.io/upload_images/650137-46626b16fc63edac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
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
或者MAXFLOAT
repeatDuration:重復(fù)時間
removedOnCompletion:默認(rèn)為YES,代表動畫執(zhí)行完畢后就從圖層上移除摄杂,圖形會恢復(fù)到動畫執(zhí)行前的狀態(tài)坝咐。
如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài),那就設(shè)置為NO析恢,
不過還要設(shè)置fillMode
為kCAFillModeForwards
fillMode:決定當(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í)行過程
代理對象需要實現(xiàn)的方法有:(這幾個方法被定義在某個分類中)
@interface NSObject (CAAnimationDelegate)
// 動畫開始執(zhí)行的時候觸發(fā)這個方法
- (void)animationDidStart:(CAAnimation *)anim;
// 動畫執(zhí)行完畢的時候觸發(fā)這個方法
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end