一:Core Animation簡介
Core Animation陡鹃,中文翻譯為核心動畫不皆,它是一組非常強大的動畫處理API能扒,使用它能做出非常炫麗的動畫效果瓮恭,而且往往是事半功倍。也就是說剃袍,使用少量的代碼就可以實現(xiàn)非常強大的功能剥悟。
Core Animation可以用在MacOS X和iOS平臺。
Core Animation的動畫執(zhí)行過程都是在后臺操作的蹦骑,不會阻塞主線程赶么。
要注意的是,Core Animation是直接作用在CALayer上的脊串,并非UIView辫呻。
核心動畫:如果是xcode5之前的版本,使用它需要先添加QuartzCore.framework和引入對應(yīng)的框架琼锋。
開發(fā)步驟:
1.使用它需要先添加??框架和引入主頭文件放闺;
2.初始化一個CAAnimation對象,并設(shè)置一些動畫相關(guān)屬性缕坎;
3.通過調(diào)用CALayer的addAnimation:forKey:方法增加CAAnimation對象到CALayer中怖侦,這樣就能開始執(zhí)行動畫了;
4.通過調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動畫谜叹。
二:CAAnimation繼承結(jié)構(gòu)
三:CAAnimation——屬性
1.是所有動畫對象的父類匾寝,負(fù)責(zé)控制動畫的持續(xù)時間和速度,是個?抽象類?荷腊,不能直接使用艳悔,應(yīng)該使用它具體的子類;
2.屬性說明:
1)?duration:動畫的持續(xù)時間女仰;
2)?repeatCount:重復(fù)次數(shù)猜年,無限循環(huán)可以設(shè)置HUGE_VALF或者M(jìn)AXFLOAT;
3)?repeatDuration:重復(fù)時間疾忍;
4)?removedOnCompletion:默認(rèn)為YES乔外,代表動畫執(zhí)行完畢后就從圖層上移除,圖形會恢復(fù)到動畫執(zhí)行前的狀態(tài)一罩。如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài)杨幼,那就設(shè)置為NO,不過還要設(shè)置fillMode為kCAFillModeForwards;
5)?fillMode:決定當(dāng)前對象在非active時間段的行為差购。比如動畫開始之前或者動畫結(jié)束之后补疑;
6)?beginTime:可以用來設(shè)置動畫延遲執(zhí)行時間,若想延遲2s歹撒,就設(shè)置為CACurrentMediaTime()+2莲组,CACurrentMediaTime()為圖層的當(dāng)前時間;
7)?timingFunction:速度控制函數(shù)暖夭,控制動畫運行的節(jié)奏锹杈;
8)?delegate?:動畫代理。
四:CAAnimation——動畫填充模式
fillMode屬性值(要想fillMode有效迈着,最好設(shè)置removedOnCompletion= NO)
1)?kCAFillModeRemoved?這個是默認(rèn)值竭望,也就是說當(dāng)動畫開始前和動畫結(jié)束后,動畫對layer都沒有影響裕菠,動畫結(jié)束后咬清,layer會恢復(fù)到之前的狀態(tài);
2)?kCAFillModeForwards?當(dāng)動畫結(jié)束后奴潘,layer會一直保持著動畫最后的狀態(tài)旧烧;
3)?kCAFillModeBackwards?在動畫開始前,只需要將動畫加入了一個layer画髓,layer便立即進(jìn)入動畫的初始狀態(tài)并等待動畫開始掘剪;
4)?kCAFillModeBoth?這個其實就是上面兩個的合成.動畫加入后開始之前,layer便處于動畫初始狀態(tài)奈虾,動畫結(jié)束后layer保持動畫最后的狀態(tài)夺谁。
五:CAAnimation——速度控制函數(shù)
速度控制函數(shù)(CAMediaTimingFunction)
animation.timingFunction=
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
1)?kCAMediaTimingFunctionLinear(線性):勻速,給你一個相對靜態(tài)的感覺肉微;
2)?kCAMediaTimingFunctionEaseIn(漸進(jìn)):動畫緩慢進(jìn)入匾鸥,然后加速離開;
3)?kCAMediaTimingFunctionEaseOut(漸出):動畫全速進(jìn)入碉纳,然后減速的到達(dá)目的地勿负;
4)?kCAMediaTimingFunctionEaseInEaseOut(漸進(jìn)漸出):動畫緩慢的進(jìn)入,中間加速村象,然后減速的到達(dá)目的地笆环。這個是默認(rèn)的動畫行為攒至。
下圖展示了前面四種Timing Function的曲線圖,橫座標(biāo)表示時間,縱座標(biāo)表示變化量,這點需要搞清楚(并不是平面座標(biāo)系中xy)厚者。
六:CAPropertyAnimation
1) 是CAAnimation的子類,也是個抽象類迫吐,要想創(chuàng)建動畫對象库菲,應(yīng)該使用它的兩個子類;
2) CABasicAnimation志膀;
3) CAKeyframeAnimation熙宇;
4) 屬性說明:keyPath:通過指定CALayer的一個屬性名稱為keyPath(NSString類型)鳖擒,并且對CALayer的這個屬性的值進(jìn)行修改,達(dá)到相應(yīng)的動畫效果烫止。比如蒋荚,指定@“position”為keyPath,就修改CALayer的position屬性的值馆蠕,以達(dá)到平移的動畫效果期升。
七:CABasicAnimation——基本動畫
1.屬性說明:
1)?keyPath?:要改變的屬性名稱(傳字符串);
2)?fromValue?:keyPath相應(yīng)屬性的初始值互躬;
3)?toValue?:keyPath相應(yīng)屬性的結(jié)束值播赁;
4)?autoreverses:?(默認(rèn)為NO) 當(dāng)你設(shè)定這個屬性為 YES 時,在它到達(dá)目的地之后吼渡,動畫的返回到開始的值容为,代替了直接跳轉(zhuǎn)到 開始的值。
示例
八:CAKeyframeAnimation——關(guān)鍵幀動畫
1.關(guān)鍵幀動畫寺酪,也是CAPropertyAnimation的子類坎背,與CABasicAnimation的區(qū)別是:CABasicAnimation只能從一個數(shù)值(fromValue)變到另一個數(shù)值(toValue),而CAKeyframeAnimation會使用一個NSArray保存這些數(shù)值寄雀。
NOTICE: CAKeyframeAnimation則可以支持任意多個關(guān)鍵幀,關(guān)鍵幀有兩種方式來指定:
①使用path或者使用values,path是一個CGPathRef的值,且path只能對CALayer的 anchorPoint 和 position 屬性起作用,且設(shè)置了path之后values就不再起效了沼瘫;
②而values則更加靈活. keyTimes這個可選參數(shù)可以為對應(yīng)的關(guān)鍵幀指定對應(yīng)的時間點,其取值范圍為0到1.0,keyTimes中的每一個時間值都對應(yīng)values中的每一幀.當(dāng)keyTimes沒有設(shè)置的時候,各個關(guān)鍵幀的時間是平分的。
1)?values?:上述的NSArray對象咙俩。里面的元素稱為“關(guān)鍵幀”(keyframe)耿戚。動畫對象會在指定的時間(duration)內(nèi),依次顯示values數(shù)組中的每一個關(guān)鍵幀
2)?path?:代表路徑可以設(shè)置一個CGPathRef阿趁、CGMutablePathRef膜蛔,讓圖層按照路徑軌跡移動。path只對CALayer的anchorPoint和position起作用脖阵。如果設(shè)置了path皂股,那么values將被忽略
3)?keyTimes?:可以為對應(yīng)的關(guān)鍵幀指定對應(yīng)的時間點,其取值范圍為0到1.0命黔,keyTimes中的每一個時間值都對應(yīng)values中的每一幀呜呐。如果沒有設(shè)置keyTimes,各個關(guān)鍵幀的時間是平分的CABasicAnimation可看做是只有2個關(guān)鍵幀的CAKeyframeAnimation悍募。
Values方式 示例
path方式 示例
九:轉(zhuǎn)場動畫——CATransition
1.CATransition是CAAnimation的子類蘑辑,用于做轉(zhuǎn)場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果坠宴。iOS比Mac OS X的轉(zhuǎn)場動畫效果少一點
2.UINavigationController就是通過CATransition實現(xiàn)了將控制器的視圖推入屏幕的動畫效果
<1>type:動畫過渡類型
<2>subtype:動畫過渡方向
<3>startProgress:動畫起點(在整體動畫的百分比)
<4>endProgress:動畫終點(在整體動畫的百分比)
十:CAAnimationGroup——動畫組
1.動畫組洋魂,是CAAnimation的子類,可以保存一組動畫對象,將CAAnimationGroup對象加入層后副砍,組中所有動畫對象可以同時并發(fā)運行
2.屬性說明:
<1>animations:用來保存一組動畫對象的NSArray
<2>默認(rèn)情況下衔肢,一組動畫對象是同時運行的,也可以通過設(shè)置動畫對象的beginTime屬性來更改動畫的開始時間豁翎。