一:Core Animation簡(jiǎn)介
Core Animation,中文翻譯為核心動(dòng)畫串纺,它是一組非常強(qiáng)大的動(dòng)畫處理API丽旅,使用它能做出非常炫麗的動(dòng)畫效果,而且往往是事半功倍纺棺。也就是說(shuō)榄笙,使用少量的代碼就可以實(shí)現(xiàn)非常強(qiáng)大的功能。
Core Animation可以用在MacOS X和iOS平臺(tái)祷蝌。
Core Animation的動(dòng)畫執(zhí)行過(guò)程都是在后臺(tái)操作的茅撞,不會(huì)阻塞主線程。
要注意的是巨朦,Core Animation是直接作用在CALayer上的米丘,并非UIView。
核心動(dòng)畫:如果是xcode5之前的版本糊啡,使用它需要先添加QuartzCore.framework和引入對(duì)應(yīng)的框架
開發(fā)步驟:
1.使用它需要先添加<QuartzCore/QuartzCore.h>框架和引入主頭文件
2.初始化一個(gè)CAAnimation對(duì)象拄查,并設(shè)置一些動(dòng)畫相關(guān)屬性
3.通過(guò)調(diào)用CALayer的addAnimation:forKey:方法增加CAAnimation對(duì)象到CALayer中,這樣就能開始執(zhí)行動(dòng)畫了
4.通過(guò)調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動(dòng)畫
二:CAAnimation繼承結(jié)構(gòu)
三:CAAnimation——屬性
1.是所有動(dòng)畫對(duì)象的父類悔橄,負(fù)責(zé)控制動(dòng)畫的持續(xù)時(shí)間和速度靶累,是個(gè)抽象類腺毫,不能直接使用癣疟,應(yīng)該使用它具體的子類
2.屬性說(shuō)明:
- duration: 動(dòng)畫的持續(xù)時(shí)間.
- repeatCount:重復(fù)次數(shù),無(wú)限循環(huán)可以設(shè)置HUGE_VALF或者M(jìn)AXFLOAT
- repeatDuration:重復(fù)時(shí)間
- removedOnCompletion:默認(rèn)為YES潮酒,代表動(dòng)畫執(zhí)行完畢后就從圖層上移除睛挚,圖形會(huì)恢復(fù)到動(dòng)畫執(zhí)行前的狀態(tài)。如果想讓圖層保持顯示動(dòng)畫執(zhí)行后的狀態(tài)急黎,那就設(shè)置為NO扎狱,不過(guò)還要設(shè)置fillMode為kCAFillModeForwards
- fillMode:決定當(dāng)前對(duì)象在非active時(shí)間段的行為侧到。比如動(dòng)畫開始之前或者動(dòng)畫結(jié)束之后
- beginTime:可以用來(lái)設(shè)置動(dòng)畫延遲執(zhí)行時(shí)間,若想延遲2s淤击,就設(shè)置為CACurrentMediaTime()+2匠抗,CACurrentMediaTime()為圖層的當(dāng)前時(shí)間
- timingFunction:速度控制函數(shù),控制動(dòng)畫運(yùn)行的節(jié)奏
- delegate:動(dòng)畫代理
四:CAAnimation——?jiǎng)赢嬏畛淠J?/strong>
fillMode屬性值(要想fillMode有效污抬,最好設(shè)置removedOnCompletion= NO)
- kCAFillModeRemoved 這個(gè)是默認(rèn)值汞贸,也就是說(shuō)當(dāng)動(dòng)畫開始前和動(dòng)畫結(jié)束后,動(dòng)畫對(duì)layer都沒(méi)有影響印机,動(dòng)畫結(jié)束后矢腻,layer會(huì)恢復(fù)到之前的狀態(tài)
- kCAFillModeForwards 當(dāng)動(dòng)畫結(jié)束后,layer會(huì)一直保持著動(dòng)畫最后的狀態(tài)
- kCAFillModeBackwards 在動(dòng)畫開始前射赛,只需要將動(dòng)畫加入了一個(gè)layer多柑,layer便立即進(jìn)入動(dòng)畫的初始狀態(tài)并等待動(dòng)畫開始。
- kCAFillModeBoth 這個(gè)其實(shí)就是上面兩個(gè)的合成.動(dòng)畫加入后開始之前楣责,layer便處于動(dòng)畫初始狀態(tài)竣灌,動(dòng)畫結(jié)束后layer保持動(dòng)畫最后的狀態(tài)
五:CAAnimation——速度控制函數(shù)
速度控制函數(shù)(CAMediaTimingFunction)
animation.timingFunction= [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
- kCAMediaTimingFunctionLinear(線性):勻速,給你一個(gè)相對(duì)靜態(tài)的感覺(jué)
- kCAMediaTimingFunctionEaseIn(漸進(jìn)):動(dòng)畫緩慢進(jìn)入秆麸,然后加速離開
- kCAMediaTimingFunctionEaseOut(漸出):動(dòng)畫全速進(jìn)入帐偎,然后減速的到達(dá)目的地
- kCAMediaTimingFunctionEaseInEaseOut(漸進(jìn)漸出):動(dòng)畫緩慢的進(jìn)入,中間加速蛔屹,然后減速的到達(dá)目的地削樊。這個(gè)是默認(rèn)的動(dòng)畫行為。
下圖展示了前面四種Timing Function的曲線圖,橫座標(biāo)表示時(shí)間,縱座標(biāo)表示變化量,這點(diǎn)需要搞清楚(并不是平面座標(biāo)系中xy).
六:CAPropertyAnimation
- 是CAAnimation的子類兔毒,也是個(gè)抽象類漫贞,要想創(chuàng)建動(dòng)畫對(duì)象,應(yīng)該使用它的兩個(gè)子類:
- CABasicAnimation
- CAKeyframeAnimation
- 屬性說(shuō)明:keyPath:通過(guò)指定CALayer的一個(gè)屬性名稱為keyPath(NSString類型)育叁,并且對(duì)CALayer的這個(gè)屬性的值進(jìn)行修改迅脐,達(dá)到相應(yīng)的動(dòng)畫效果。比如豪嗽,指定@“position”為keyPath谴蔑,就修改CALayer的position屬性的值,以達(dá)到平移的動(dòng)畫效果
七:CABasicAnimation——基本動(dòng)畫
1.屬性說(shuō)明:
1)keyPath:要改變的屬性名稱(傳字符串)
2)fromValue:keyPath相應(yīng)屬性的初始值
3)toValue:keyPath相應(yīng)屬性的結(jié)束值
- autoreverses: (默認(rèn)為NO) 當(dāng)你設(shè)定這個(gè)屬性為 YES 時(shí),在它到達(dá)目的地之后,動(dòng)畫的返回到開始的值,代替了直接跳轉(zhuǎn)到 開始的值龟梦。
示例
八:CAKeyframeAnimation——關(guān)鍵幀動(dòng)畫
1.關(guān)鍵幀動(dòng)畫隐锭,也是CAPropertyAnimation的子類,與CABasicAnimation的區(qū)別是:CABasicAnimation只能從一個(gè)數(shù)值(fromValue)變到另一個(gè)數(shù)值(toValue)计贰,而CAKeyframeAnimation會(huì)使用一個(gè)NSArray保存這些數(shù)值钦睡。
NOTICE: CAKeyframeAnimation則可以支持任意多個(gè)關(guān)鍵幀,關(guān)鍵幀有兩種方式來(lái)指定:
①使用path或者使用values,path是一個(gè)CGPathRef的值,且path只能對(duì)CALayer的 anchorPoint 和 position 屬性起作用,且設(shè)置了path之后values就不再起效了.
②而values則更加靈活. keyTimes這個(gè)可選參數(shù)可以為對(duì)應(yīng)的關(guān)鍵幀指定對(duì)應(yīng)的時(shí)間點(diǎn),其取值范圍為0到1.0,keyTimes中的每一個(gè)時(shí)間值都對(duì)應(yīng)values中的每一幀.當(dāng)keyTimes沒(méi)有設(shè)置的時(shí)候,各個(gè)關(guān)鍵幀的時(shí)間是平分的.
- values:上述的NSArray對(duì)象。里面的元素稱為“關(guān)鍵幀”(keyframe)躁倒。動(dòng)畫對(duì)象會(huì)在指定的時(shí)間(duration)內(nèi)荞怒,依次顯示values數(shù)組中的每一個(gè)關(guān)鍵幀
- path:代表路徑可以設(shè)置一個(gè)CGPathRef洒琢、CGMutablePathRef,讓圖層按照路徑軌跡移動(dòng)褐桌。path只對(duì)CALayer的anchorPoint和position起作用衰抑。如果設(shè)置了path,那么values將被忽略
- keyTimes:可以為對(duì)應(yīng)的關(guān)鍵幀指定對(duì)應(yīng)的時(shí)間點(diǎn)荧嵌,其取值范圍為0到1.0停士,keyTimes中的每一個(gè)時(shí)間值都對(duì)應(yīng)values中的每一幀。如果沒(méi)有設(shè)置keyTimes完丽,各個(gè)關(guān)鍵幀的時(shí)間是平分的CABasicAnimation可看做是只有2個(gè)關(guān)鍵幀的CAKeyframeAnimation
Values方式 示例
path方式 示例
九:轉(zhuǎn)場(chǎng)動(dòng)畫——CATransition
1.CATransition是CAAnimation的子類恋技,用于做轉(zhuǎn)場(chǎng)動(dòng)畫,能夠?yàn)閷犹峁┮瞥銎聊缓鸵迫肫聊坏膭?dòng)畫效果逻族。iOS比Mac OS X的轉(zhuǎn)場(chǎng)動(dòng)畫效果少一點(diǎn)
2.UINavigationController就是通過(guò)CATransition實(shí)現(xiàn)了將控制器的視圖推入屏幕的動(dòng)畫效果
<1>type:動(dòng)畫過(guò)渡類型
<2>subtype:動(dòng)畫過(guò)渡方向
<3>startProgress:動(dòng)畫起點(diǎn)(在整體動(dòng)畫的百分比)
<4>endProgress:動(dòng)畫終點(diǎn)(在整體動(dòng)畫的百分比)
十:CAAnimationGroup——?jiǎng)赢嫿M
1.動(dòng)畫組蜻底,是CAAnimation的子類,可以保存一組動(dòng)畫對(duì)象聘鳞,將CAAnimationGroup對(duì)象加入層后薄辅,組中所有動(dòng)畫對(duì)象可以同時(shí)并發(fā)運(yùn)行
2.屬性說(shuō)明:
<1>animations:用來(lái)保存一組動(dòng)畫對(duì)象的NSArray
<2>默認(rèn)情況下,一組動(dòng)畫對(duì)象是同時(shí)運(yùn)行的抠璃,也可以通過(guò)設(shè)置動(dòng)畫對(duì)象的beginTime屬性來(lái)更改動(dòng)畫的開始時(shí)間
十一:CASpringAnimation -- 彈簧動(dòng)畫
1.CASpringAnimation是iOS9新加入動(dòng)畫類型站楚,是CABasicAnimation的子類,用于實(shí)現(xiàn)彈簧動(dòng)畫搏嗡。
CASpringAnimation的重要屬性:
mass:質(zhì)量(影響彈簧的慣性窿春,質(zhì)量越大,彈簧慣性越大采盒,運(yùn)動(dòng)的幅度越大)
stiffness:彈性系數(shù)(彈性系數(shù)越大旧乞,彈簧的運(yùn)動(dòng)越快)
damping:阻尼系數(shù)(阻尼系數(shù)越大,彈簧的停止越快)
initialVelocity:初始速率(彈簧動(dòng)畫的初始速度大小磅氨,彈簧運(yùn)動(dòng)的初始方向與初始速率的正負(fù)一致尺栖,若初始速率為0,表示忽略該屬性)
settlingDuration:結(jié)算時(shí)間(根據(jù)動(dòng)畫參數(shù)估算彈簧開始運(yùn)動(dòng)到停止的時(shí)間烦租,動(dòng)畫設(shè)置的時(shí)間最好根據(jù)此時(shí)間來(lái)設(shè)置)
- (void)springAni {
CASpringAnimation * ani = [CASpringAnimation animationWithKeyPath:@"bounds"];
ani.mass = 10.0; //質(zhì)量延赌,影響圖層運(yùn)動(dòng)時(shí)的彈簧慣性,質(zhì)量越大叉橱,彈簧拉伸和壓縮的幅度越大
ani.stiffness = 5000; //剛度系數(shù)(勁度系數(shù)/彈性系數(shù))挫以,剛度系數(shù)越大,形變產(chǎn)生的力就越大赏迟,運(yùn)動(dòng)越快
ani.damping = 100.0;//阻尼系數(shù)屡贺,阻止彈簧伸縮的系數(shù)蠢棱,阻尼系數(shù)越大锌杀,停止越快
ani.initialVelocity = 5.f;//初始速率甩栈,動(dòng)畫視圖的初始速度大小;速率為正數(shù)時(shí),速度方向與運(yùn)動(dòng)方向一致糕再,速率為負(fù)數(shù)時(shí)量没,速度方向與運(yùn)動(dòng)方向相反
ani.duration = ani.settlingDuration;
ani.toValue = [NSValue valueWithCGRect:self.centerShow.bounds];
ani.removedOnCompletion = NO;
ani.fillMode = kCAFillModeForwards;
ani.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.cartCenter.layer addAnimation:ani forKey:@"boundsAni"];
}
UIView動(dòng)畫
***
######UIView+Animation.h
* [UIView+Animation一些常用的動(dòng)畫分類](http://www.reibang.com/p/b471d79e1e5d)
* [進(jìn)階](https://www.gitbook.com/book/zsisme/ios-/details)