Core Animation

一: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)

class.jpeg

三:CAAnimation——屬性

1.是所有動(dòng)畫對(duì)象的父類悔橄,負(fù)責(zé)控制動(dòng)畫的持續(xù)時(shí)間和速度靶累,是個(gè)抽象類腺毫,不能直接使用癣疟,應(yīng)該使用它具體的子類

2.屬性說(shuō)明:

  1. duration: 動(dòng)畫的持續(xù)時(shí)間.
  1. repeatCount:重復(fù)次數(shù),無(wú)限循環(huán)可以設(shè)置HUGE_VALF或者M(jìn)AXFLOAT
  1. repeatDuration:重復(fù)時(shí)間
  1. 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
  1. fillMode:決定當(dāng)前對(duì)象在非active時(shí)間段的行為侧到。比如動(dòng)畫開始之前或者動(dòng)畫結(jié)束之后
  1. beginTime:可以用來(lái)設(shè)置動(dòng)畫延遲執(zhí)行時(shí)間,若想延遲2s淤击,就設(shè)置為CACurrentMediaTime()+2匠抗,CACurrentMediaTime()為圖層的當(dāng)前時(shí)間
  1. timingFunction:速度控制函數(shù),控制動(dòng)畫運(yùn)行的節(jié)奏
  1. delegate:動(dòng)畫代理

四:CAAnimation——?jiǎng)赢嬏畛淠J?/strong>

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

  1. 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)
  1. kCAFillModeForwards 當(dāng)動(dòng)畫結(jié)束后,layer會(huì)一直保持著動(dòng)畫最后的狀態(tài)
  1. kCAFillModeBackwards 在動(dòng)畫開始前射赛,只需要將動(dòng)畫加入了一個(gè)layer多柑,layer便立即進(jìn)入動(dòng)畫的初始狀態(tài)并等待動(dòng)畫開始。
  1. 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];
  1. kCAMediaTimingFunctionLinear(線性):勻速,給你一個(gè)相對(duì)靜態(tài)的感覺(jué)
  1. kCAMediaTimingFunctionEaseIn(漸進(jìn)):動(dòng)畫緩慢進(jìn)入秆麸,然后加速離開
  1. kCAMediaTimingFunctionEaseOut(漸出):動(dòng)畫全速進(jìn)入帐偎,然后減速的到達(dá)目的地
  1. 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).
.jpg

六:CAPropertyAnimation

  1. 是CAAnimation的子類兔毒,也是個(gè)抽象類漫贞,要想創(chuàng)建動(dòng)畫對(duì)象,應(yīng)該使用它的兩個(gè)子類:
  1. CABasicAnimation
  1. CAKeyframeAnimation
  1. 屬性說(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é)束值

  1. autoreverses: (默認(rèn)為NO) 當(dāng)你設(shè)定這個(gè)屬性為 YES 時(shí),在它到達(dá)目的地之后,動(dòng)畫的返回到開始的值,代替了直接跳轉(zhuǎn)到 開始的值龟梦。

示例

demo.png

八: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í)間是平分的.

  1. values:上述的NSArray對(duì)象。里面的元素稱為“關(guān)鍵幀”(keyframe)躁倒。動(dòng)畫對(duì)象會(huì)在指定的時(shí)間(duration)內(nèi)荞怒,依次顯示values數(shù)組中的每一個(gè)關(guān)鍵幀
  1. path:代表路徑可以設(shè)置一個(gè)CGPathRef洒琢、CGMutablePathRef,讓圖層按照路徑軌跡移動(dòng)褐桌。path只對(duì)CALayer的anchorPoint和position起作用衰抑。如果設(shè)置了path,那么values將被忽略
  1. 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方式 示例
Values關(guān)鍵幀.png
path方式 示例
path 關(guān)鍵幀.png

九:轉(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)畫的百分比)

效果.jpeg

十: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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市突想,隨后出現(xiàn)的幾起案子殴蹄,更是在濱河造成了極大的恐慌,老刑警劉巖猾担,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袭灯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡绑嘹,警方通過(guò)查閱死者的電腦和手機(jī)稽荧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)工腋,“玉大人姨丈,你說(shuō)我怎么就攤上這事∩醚” “怎么了蟋恬?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)趁冈。 經(jīng)常有香客問(wèn)我歼争,道長(zhǎng),這世上最難降的妖魔是什么渗勘? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任矾飞,我火速辦了婚禮,結(jié)果婚禮上呀邢,老公的妹妹穿的比我還像新娘洒沦。我一直安慰自己,他們只是感情好价淌,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布申眼。 她就那樣靜靜地躺著,像睡著了一般蝉衣。 火紅的嫁衣襯著肌膚如雪括尸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天病毡,我揣著相機(jī)與錄音濒翻,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛有送,可吹牛的內(nèi)容都是我干的淌喻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涯塔!你這毒婦竟也來(lái)了清蚀?” 一聲冷哼從身側(cè)響起枷邪,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤救斑,失蹤者是張志新(化名)和其女友劉穎穷娱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡左敌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棍苹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懈贺。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堡妒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忿檩,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布鱼的,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏枢步。R本人自食惡果不足惜示罗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渴庆,春花似錦铃芦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春击罪,著一層夾襖步出監(jiān)牢的瞬間竣稽,已是汗流浹背囱怕。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工霍弹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人台丛。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓耍缴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挽霉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子防嗡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容