iOS之動畫

1.隱式動畫

1.1.什么是隱式動畫?

了解什么是隱式動畫之前,要先了解是什么根層和非根層.

根層:UIView內(nèi)部自動關(guān)聯(lián)著的那個layer我們稱它是根層.

非根層:手動創(chuàng)建的層,稱為非根層.

隱式動畫就是當(dāng)對非根層的部分屬性進(jìn)行修改時,它會子動的產(chǎn)生一些動畫的效果.我們稱這個默認(rèn)產(chǎn)生的動畫為隱式動畫.

1.2.如何取消隱式動畫?

先要了解動畫底層是怎么做的.動畫的底層是包裝成一個事務(wù)來進(jìn)行的.

1.3.什么是事務(wù)?

很多操作綁定在一起,當(dāng)這些操作執(zhí)行完畢后,才去執(zhí)行下一個操作.

開啟事務(wù)

[CATransaction begin];

設(shè)置事務(wù)沒有動畫

[CATransaction setDisableActions:YES];

設(shè)置動畫執(zhí)行的時間

[CATransaction setAnimationDuration:2];

提交事務(wù)

[CATransaction commit];


2.核心動畫(CAAnimation)

核心動畫之作用在層(CALayer)上.

動畫的本質(zhì)是改圖層的某個屬性.

CAAnimation的層級結(jié)構(gòu)

CAPropertyAnimation是CAAnimation的子類余爆,也是個抽象類纷宇,要想創(chuàng)建動畫對象,應(yīng)該使用它的兩個子類:CABasicAnimation和CAKeyframeAnimation

2.1.CABasicAnimation

屬性解析:

keyPath:通過指定CALayer的一個屬性名稱為keyPath(NSString類型)蛾方,并且對CALayer的這個屬性的值進(jìn)行修改像捶,達(dá)到相應(yīng)的動畫效果上陕。比如,指定@“position”為keyPath作岖,就修改CALayer的postition屬性的值唆垃,以達(dá)到平移的動畫效果五芝。

fromValue:keyPath相應(yīng)的屬性的初始值?

toValue:keyPath相應(yīng)屬性的結(jié)束值

隨著動畫的進(jìn)行痘儡,在長度為duration的持續(xù)時間內(nèi)枢步,keyPath相應(yīng)屬性的值從fromValue漸漸的變?yōu)閠oValue。如果fillMode=kCAFillModeForwards和removedOnComletion=NO矾瑰,那么在動畫執(zhí)行完畢后隘擎,圖層會保持顯示動畫執(zhí)行后的狀態(tài),但在實(shí)際上货葬,圖層的屬性值還是動畫執(zhí)行前的初始值,并沒有真正被改變休傍。

CABasicAnimation *anim = [CABasicAnimation animation];圖層有那些屬性,這里才能寫那些屬性.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

anim.keyPath = @"transform.scale";

anim.toValue = @0.5;

告訴動畫完成的時候不要移除anim.removedOnCompletion = NO;保存動畫最前面的效果.

anim.fillMode = kCAFillModeForwards;把動畫添加到層上.

[_redView.layer addAnimation:anim forKey:nil];

2.2.幀動畫(CAKeyframeAnimation)

CAKeyframeAnimation蹲姐,CApropertyAnimation的子類,跟CABasicAnimation的區(qū)別是:CABasicAnimation只能從一個數(shù)值(fromValue)變到另一個數(shù)值(toValue)忙厌,而CAKeyframeAnimation會使用一個NSArray爆蔥這些數(shù)值

屬性解析:

values:就是上述的NSarray對象。里面的元素稱為“關(guān)鍵幀”(keyframe)慰毅。動畫對象會在指定的時間(duration)內(nèi)扎阶,依次顯示values數(shù)組中的每一個關(guān)鍵幀

path:可以設(shè)置一個CGPathRef/CGMutablePathRef,讓層跟著路徑移動东臀。path只對CALayer的anchorPoint和position起作用。如果你設(shè)置了path宰掉,那么values將被忽略

keyTimes:可以為對應(yīng)的關(guān)鍵幀指定對應(yīng)的時間點(diǎn),七取值范圍為0到1.0轨奄。keyTimes每一個時間值都對應(yīng)values中的每一幀。當(dāng)keyTimes沒有設(shè)置的時候挪拟,各個關(guān)鍵正的時間是平分的

CABasicAnimation可以看做是最多只有2個關(guān)鍵幀的CAkeyframeAnimation

2.3.動畫組(CAAnimationGroup)

CAAnimationGroup,CAAnimation的子類谎柄,可以保存一組動畫對象,將CAAnimationGroup對象加入層后朝巫,組中所有動畫對象可以同時并發(fā)運(yùn)行

屬性解析:

animations:用來保存一組動畫對象的NSArray石景,默認(rèn)情況下,一組動畫對象是同時運(yùn)行的揪荣,也可以通過設(shè)置動畫對象的beginTime屬性來更改動畫的開始時間

CAAnimationGroup *group = [CAAnimationGroup animation];

平移

CABasicAnimation *anim = [CABasicAnimation animation];anim.keyPath = @"position.y";

anim.toValue = @400;

縮放

CABasicAnimation *scaleAnim = [CABasicAnimation animation];scaleAnim.keyPath = @"transform.scale";

scaleAnim.toValue = @0.5;

設(shè)置動畫組屬性

group.animations = @[anim,scaleAnim];

group.removedOnCompletion = NO;

group.fillMode = kCAFillModeForwards;添加組動畫

[self.redView.layer addAnimation:group forKey:nil];

使用動畫組的好處,不需要每次都去添加動畫,設(shè)置動畫完成時的屬性.只需要把要執(zhí)行的動畫,添加到動畫組的animations數(shù)組當(dāng)中即可,最后把組動畫添加到層上,就會自動執(zhí)行數(shù)組當(dāng)中的動畫.動畫完成時設(shè)置的屬性也只需要設(shè)置一次.

2.4.轉(zhuǎn)場動畫(CATransition)

什么是轉(zhuǎn)場動畫?就是從 個場景轉(zhuǎn)換到另 個場景,像導(dǎo)航控制器的push效果,就是 個轉(zhuǎn)場.

CATransition恩商,CAAnimation的子類,用于做轉(zhuǎn)場動畫揽乱,能夠?yàn)閷犹峁┮瞥聊缓鸵迫肫聊坏膭赢嬓Ч?/i>

UINavigationController就是通過CATransition實(shí)現(xiàn)了將控制器的視圖推入屏幕的動畫效果

屬性解析:

type:動畫過渡類型

subtype:動畫過渡方向

startProgress:動畫起點(diǎn)(在整體動畫的百分比)

endProgress:動畫終點(diǎn)(在整體動畫的百分比)

創(chuàng)建轉(zhuǎn)場動畫

CATransition *anim = [CATransition animation];設(shè)置轉(zhuǎn)場類型

anim.type = @"cube";

anim.duration = 1;

設(shè)置轉(zhuǎn)場的 向

anim.subtype = kCATransitionFromLeft;設(shè)置動畫的開始位置

anim.startProgress = 0.5;

設(shè)置動畫的結(jié)束位置

anim.endProgress =0.8;

添加動畫.了

[_imageV.layer addAnimation:anim forKey:nil];

要執(zhí) 動畫的代碼稱為轉(zhuǎn)場代碼.轉(zhuǎn)場動畫要和轉(zhuǎn)場代碼寫在同 個 法當(dāng)中才有動畫效果.

3.UIView動畫

UIKit直接將動畫集成到UIKit類中粟矿,當(dāng)內(nèi)部的一些屬性發(fā)生改變時,UIView將為這些改變提供動畫支持

執(zhí)行動畫所想要的工作由UIView類自動完成撒犀,但仍要在希望執(zhí)行動畫時通知試圖為此需要將改變屬性的代碼放到[UIView beginAnimations:nil context:nil]和[UIView

?commiAnimations]之間

4.Block動畫

5.幀動畫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掏秩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子映凳,更是在濱河造成了極大的恐慌,老刑警劉巖诈豌,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矫渔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)顿痪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門送膳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丑蛤,“玉大人,你說我怎么就攤上這事受裹。” “怎么了棉饶?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袜啃。 經(jīng)常有香客問我幸缕,道長,這世上最難降的妖魔是什么发乔? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮起愈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抬虽。我一直安慰自己纵菌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布疤剑。 她就那樣靜靜地躺著滑绒,像睡著了一般疑故。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纵势,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天管钳,我揣著相機(jī)與錄音,去河邊找鬼才漆。 笑死,一個胖子當(dāng)著我的面吹牛醇滥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阅虫,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼不跟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窝革?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤工猜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后篷帅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拴泌,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年箭昵,在試婚紗的時候發(fā)現(xiàn)自己被綠了回季。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片正林。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡颤殴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涵但,到底是詐尸還是另有隱情,我是刑警寧澤矮瘟,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站劫侧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏板辽。R本人自食惡果不足惜奇瘦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望醇坝。 院中可真熱鬧,春花似錦呼猪、人聲如沸砸琅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诱篷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棕所,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工迎吵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躲撰,地道東北人茴肥。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓荡灾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親批幌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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

  • 在iOS實(shí)際開發(fā)中常用的動畫無非是以下四種:UIView動畫皆警,核心動畫,幀動畫信姓,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,101評論 1 23
  • 在iOS中隨處都可以看到絢麗的動畫效果意推,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜珊蟀,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,495評論 6 30
  • Core Animation Core Animation育灸,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API磅崭,...
    45b645c5912e閱讀 3,032評論 0 21
  • 核心動畫(Core Animation) Core Animation,中文翻譯為核心動畫柔逼,它是一組非常強(qiáng)大的動畫...
    李小南閱讀 785評論 2 15
  • 在iOS中隨處都可以看到絢麗的動畫效果恩够,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌蜂桶。在這里你可以看...
    F麥子閱讀 5,113評論 5 13