動畫的原理

什么是動畫
動畫双藕,顧名思義止状,就是能“動”的畫。人的眼睛對圖像有短暫的記憶效應(yīng)攒霹,所以當眼睛看到多張圖片連續(xù)快速的切換時怯疤,就會被認為是一段連續(xù)播放的動畫了。
比如催束,中國古代的“走馬燈”集峦,就是用的這個原理。有些人還會在一個本子每頁上手繪一些漫畫泣崩,當快速翻頁的時候少梁,也會看到動畫的效果,比如:


圖片來自網(wǎng)絡(luò)

計算機動畫的實現(xiàn)方式
動畫是由一張張圖片組成的矫付,在計算機中凯沪,我們稱每一張圖片為 一幀畫面
如果我們想實現(xiàn)這么一個動畫:一個水杯放在桌子的左邊买优,移動到右邊妨马,那么我們實際操作的,只是水杯杀赢。所以動畫的實現(xiàn)烘跺,只是對運動變化了的部分的處理。
逐幀 與 關(guān)鍵幀
類似于上面提到的手繪翻頁方式脂崔,我們可以將這個水杯在每幀畫面中的位置一一找出來滤淳,這樣實現(xiàn)動畫的方式就叫作 逐幀動畫,我們需要處理動畫中的每一幀砌左。
我們一般在計算機上用 FPS ( Frames Per Second) 脖咐,即 每秒的幀數(shù) 來表示動畫的刷新速度,基于屏幕的刷新率等其他原因汇歹,在計算機上一般采用 60 FPS屁擅。如果運動變化幅度較緩,減半到 30 FPS 時产弹,我們?nèi)庋垡彩强山邮艿呐筛琛]^低的 FPS 會讓我們有“卡頓”的感覺。

逐幀動畫是最直接的痰哨,但要處理的幀數(shù)太多胶果,所以實現(xiàn)過程是會麻煩。
計算機的工作就是來完成重復單調(diào)的工作的斤斧,所以早抠,有些工作是可以考慮讓計算機來完成的。
上面的例子折欠,可以變成一個涉及數(shù)學和物理的問題:一個杯子初始位置在左邊贝或,n秒后勻速運動到右邊吼过,那么在每 1/60 秒的時候,這個杯子的位置顯然是可以計算出來的了咪奖。所以盗忱,我們其實只需要指定一些 關(guān)鍵 信息就能讓計算機自己計算出每一幀杯子的位置了:
起始位置,比如一個坐標 (0,0)
結(jié)束位置羊赵,再比如一個坐標 (100,0)
動畫總時間趟佃,比如 0.25 秒
勻速運動

這種方式就稱之為 關(guān)鍵幀動畫。即我們只需要給定幾個關(guān)鍵幀的畫面信息昧捷,關(guān)鍵幀與關(guān)鍵幀之間的過渡幀都將由計算機自動生成闲昭。
這里說的 關(guān)鍵幀動畫,是指的廣義上的一種動畫制作方式靡挥,并不僅指CAKeyframeAnimation
序矩,CABasicAnimation
的實現(xiàn)方式也屬于 關(guān)鍵幀動畫

iOS 動畫
說完廣義上的動畫,就可以來說說 iOS 的動畫了跋破。先來說說動畫的本質(zhì)簸淀。
動畫的本質(zhì)
繼續(xù)用上面的簡單例子:一個UIView
從 (0,0) 勻速移動到 (100,0)的動畫,動畫總時間是0.25秒毒返。假設(shè)我們基于 60 FPS 來顯示動畫租幕,那么在0.25秒內(nèi)就應(yīng)該有15幀畫面,在每幀畫面中拧簸,這個UIView
x坐標劲绪,每次應(yīng)移動 100/15 的距離。如果我們每隔 0.25/15 秒刷新一次UIView
x坐標盆赤,那么就能實現(xiàn)這個動畫效果了个粱。對于 x坐標而言续徽,每幀的位置就可以通過一個基于時間變化量的函數(shù)來求得:x=f(t) 贤旷。
所以镶摘,一個動畫的本質(zhì)姥芥,就是動畫對象(這里是UIView
)的狀態(tài)兔乞,基于時間變化的反應(yīng)了。簡單說凉唐,就是給定任意一個時刻庸追,如果你都能得到這個動畫對象的位置和、形狀等等屬性台囱,你就能實現(xiàn)這個動畫了淡溯。屬性值的變化,既可能是位置簿训、透明度咱娶、旋轉(zhuǎn)角度等的變化米间,也包括形狀的改變,比如從一條直線變化成一個圓圈膘侮,目標就是要得到變化過程中特定時刻的中間態(tài)屈糊。
動畫的實現(xiàn)
我們也可將 iOS 的動畫分為兩大類:
系統(tǒng)提供的 關(guān)鍵幀動畫 實現(xiàn)方式;用戶指定 關(guān)鍵 信息琼了,系統(tǒng)實現(xiàn)動畫過程逻锐,對用戶而言操作起來會簡單些。
逐幀動畫 實現(xiàn)方式雕薪;用戶自己 出每一幀畫面昧诱,系統(tǒng)操作方法簡單,但用戶操作的工作量就會大一些所袁。

逐幀動畫實現(xiàn)方式
簡單的說盏档,要實現(xiàn)逐幀的方式,就是需要 周期性 的調(diào)用 繪制 方法燥爷,繪制每幀的動畫對象妆丘。
這里說的 繪制,不光是指覆寫UIView
的- drawRect:
的方法來手動重繪視圖局劲,也包括修改UIView
它的屬性勺拣,比如位置、顏色等鱼填。
iOS 的動畫都是基于CALayer
的药有,iOS 的UIView
背后都有一個對應(yīng)的CALayer
。對UIView
的修改實際上都是對背后CALayer
的修改苹丸。但如果在逐幀繪制的方法中修改了一個自建的CALayer
愤惰,這個CALayer
不是對應(yīng)某個UIView
的,需注意系統(tǒng)的 隱式動畫 的影響赘理,后面會提到這點宦言。

周期性,就需要一個定時器來完成了商模,即CADisplayLink
奠旺。CADisplayLink
與NSTimer
比較類似,可以周期性的調(diào)用指定的方法施流。之所以用CADisplayLink
响疚,是因為它是基于屏幕刷新率的,即屏幕每次刷新時就會觸發(fā)調(diào)用瞪醋。iPhone 的屏幕刷新率是 60 FPS忿晕。
如果繪制過程過于復雜,不能在屏幕刷新一幀的時間內(nèi)完成银受,可以考慮改為每隔一幀繪制践盼,相當于是 30 FPS的刷新率鸦采。不然可能會使動畫不連貫,有卡頓感咕幻。

用逐幀方法繪制的原理不是很麻煩赖淤,麻煩的是繪制過程。對于一個復雜動畫谅河,你可能需要運用各種物理咱旱、幾何知識去計算視圖中間狀態(tài)的信息。比如要實現(xiàn)一條直線卷曲變化為一個圓的動畫绷耍,你就需要計算出中間態(tài)的曲線的彎曲程度和位置吐限。
著名的 facebook 的 pop 動畫框架,就是使用CADisplayLink
這種逐幀繪制的方式實現(xiàn)的褂始。
關(guān)鍵幀動畫實現(xiàn)方式
采用關(guān)鍵幀的方式來實現(xiàn)動畫诸典,要講的內(nèi)容相對逐幀的方式就多的多了。
還是用UIView
移動的簡單例子崎苗。這里面有兩個關(guān)鍵幀狐粱,起始幀和結(jié)束幀,除此之外還有2個關(guān)鍵信息:
起始幀胆数,變化信息:坐標為 (0,0)
結(jié)束幀肌蜻,變化信息:坐標為 (100,0)
動畫時間,0.25秒
勻速運動

坐標 信息是UIView
的一個屬性(實際是對應(yīng)到CALayer
的屬性)必尼,在動畫實現(xiàn)里蒋搜,我們只需要指定起始和結(jié)束的兩個關(guān)鍵值就夠了,中間的過渡值都有系統(tǒng)自動生成判莉。這里出現(xiàn)了兩種值豆挽,一個是我們設(shè)定的,一個是系統(tǒng)生成的券盅,所以要先在這里插入一個 模型層展現(xiàn)層 的概念了
CALayer
的同一個屬性值帮哈,會分別保存在模型層 modelLayer ,和展現(xiàn)層 presentationLayer 中锰镀。當我們修改屬性值時娘侍,是修改的模型層的數(shù)值,動畫時系統(tǒng)根據(jù)模型層的變化互站,生成的過渡值私蕾,是保存在展現(xiàn)層中的僵缺。
在CALayer
的對象里能直接訪問到這兩層的信息胡桃。而CALayer
的底層實現(xiàn)實際不止這兩層,但我們現(xiàn)在討論動畫的時候磕潮,可以只關(guān)心這兩層翠胰。

在整個動畫過程中容贝,呈現(xiàn)出來的過程是這樣的:
動畫前,顯示模型層的當前值之景;
動畫開始斤富,切換顯示展現(xiàn)層的值;
動畫過程中锻狗,展現(xiàn)層的值根據(jù)時間變化满力,我們看到的實際是展現(xiàn)層的值在變化;
動畫結(jié)束轻纪,切換回顯示模型層的值油额,此時模型層的值應(yīng)被修改為動畫結(jié)束時的值。

用一段代碼來解釋下動畫過程刻帚。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
view.backgroundColor = [UIColor redColor];
 [self.view addSubview:view]; 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
 animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 0)]; 
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(150, 0)]; 
[view.layer addAnimation:animation forKey:nil];
// view.frame = CGRectOffset(view.frame, 100, 0);

你會發(fā)現(xiàn)動畫結(jié)束后潦嘶,view
又跳回了原來的位置,這是因為最后一行代碼注釋了崇众,而這行代碼的功能就是實現(xiàn)第4步掂僵,將模型層的值修改為動畫結(jié)束時的值。
動畫實現(xiàn)
代碼中的CABasicAnimation
就是真正的動畫實現(xiàn)部分顷歌,也就是設(shè)定關(guān)鍵幀信息的地方锰蓬。
將動畫加入CALayer
的代碼定義為:- (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key
接受的類型是CAAnimation
類型,有下面這些子類:
CABasicAnimation
眯漩,可設(shè)定起始結(jié)束兩個關(guān)鍵幀的信息互妓。
CAKeyframeAnimation
,除首尾外坤塞,還可添加多個中間關(guān)鍵點冯勉。
CAAnimationGroup
,可組合多個動畫摹芙,因為上面兩種動畫一次只能設(shè)置一個屬性值灼狰。
CATransition
,圖層過渡動畫浮禾,默認是淡入交胚。比如修改一個CALayer
的背景色時,是從初始色慢慢淡入過渡到結(jié)束色盈电『兀可修改為新顏色把舊顏色頂出去等效果。還可使用CIFilter
濾鏡做過渡效果匆帚,一些開源UIViewController
的過渡動畫使用了這種方式熬词。

動畫中,除了屬性值外,我們還設(shè)置了兩個和時間有關(guān)的信息:動畫時間0.25秒互拾,運動方式是勻速運動歪今。
動畫持續(xù)時間很簡單,是通過CAAnimation
遵守的CAMediaTiming
協(xié)議設(shè)定的颜矿。
勻速運動是通過設(shè)置CAAnimation
的timingFunction
實現(xiàn)的寄猩,這是一個CAMediaTimingFunction
類的對象。
之前已經(jīng)說到骑疆,動畫過程實際是一個時間的函數(shù)田篇,橫坐標是時間的變化值,縱坐標是動畫屬性的變化量箍铭。那么我們就可以在一個直角坐標系中斯辰,通過作圖來畫出這個函數(shù)。比如勻速運動的圖形坡疼,就是一條通過原點的直線彬呻。
所以這個類的功能就是畫出一條曲線,來表示時間和屬性變化之間的關(guān)系柄瑰。而畫圖的方法闸氮,是使用的是畫貝葉斯曲線的方法。
系統(tǒng)提供了幾個常用的函數(shù)教沾,比如kCAMediaTimingFunctionLinear
就是勻速運動蒲跨;kCAMediaTimingFunctionEaseInEaseOut
就是一般系統(tǒng)動畫的默認值,漸入漸出授翻,即在動畫開始和結(jié)束的時候速度稍慢些或悲。


圖片來源自網(wǎng)絡(luò)

隱式動畫
上面的過程,我們是 顯式 的向一個CALayer
添加了一個動畫堪唐,所以這種方式叫做 顯式動畫巡语。對應(yīng)的,還有 隱式動畫淮菠,即系統(tǒng)自動添加上的動畫男公。
CALayer *layer = [CALayer layer]; layer.backgroundColor = [UIColor greenColor].CGColor; layer.frame = CGRectMake(0, 0, 100, 100); [self.view.layer addSublayer:layer]; layer.frame = CGRectOffset(layer.frame, 100, 0);

這段代碼里,我們沒有添加CAAnimation
動畫合陵,但 layer 不是直接變化到新的位置枢赔,而是有一個動畫效果。這就是 隱式動畫 的效果拥知。
當我們改變CALayer
的一個可動畫的屬性值時踏拜,就會觸發(fā)系統(tǒng)的隱式動畫〉吞蓿可動畫的屬性值速梗,可以在CALayer
的文檔中找到肮塞,屬性說明中標有 ** Animatable** 的,就是可自動添加動畫的屬性镀琉。
但是峦嗤,有一個例外蕊唐,對于UIView
背后對應(yīng)的CALayer
屋摔,系統(tǒng)關(guān)閉了隱式動畫,所以當我們直接修改UIView
或者是其底層的CALayer
時替梨,變化是直接生效的钓试,沒有動畫效果。
所以當我們在逐幀方式生成動畫時副瀑,是可以直接修改UIView
或者是其底層的CALayer
的信息弓熏。但是如果修改的是一個自建的單獨CALayer
時,幀與幀之間的變化還是會觸發(fā)系統(tǒng)的默認隱式動畫糠睡,這個時候就需要我們來手動關(guān)閉隱式動畫挽鞠。當快速動畫的時候不會察覺到這點,但這明顯會帶來性能上的浪費狈孔。

隱式動畫所做的事情和顯示動畫是一樣的信认,我們設(shè)置的屬性值都是模型層的數(shù)值,而系統(tǒng)會自動添加屬性對應(yīng)的CAAnimation
動畫到CALayer
上均抽。
UIView
有一系列的animateWithDuration
動畫方法嫁赏,在這些方法中UIView
會恢復隱式動畫,所以在動畫的 block 中修改屬性時油挥,又會觸發(fā)隱式動畫潦蝇。

那么系統(tǒng)是如果知道對一個屬性應(yīng)該添加哪種動畫呢,這就需要讓CAAction
協(xié)議登場了深寥。
當修改一個CALayer
的屬性時攘乒,它會通過- actionForKey:
來查詢這個屬性對應(yīng)的 action,而 key 就是對應(yīng)的屬性名稱惋鹅。CAAnimation
遵守CAAction
協(xié)議持灰,返回的 action 其實是個CAAnimation
動畫。也就是說负饲,CALayer
通過- actionForKey:
來查詢某個屬性被修改時堤魁,需要調(diào)用哪個動畫去展現(xiàn)這個變化。一般默認返回的是CABasicAnimation
返十,默認動畫時間 0.25秒妥泉,時間函數(shù)為漸入漸出 kCAMediaTimingFunctionEaseInEaseOut。

  • actionForKey:
    查詢 action 的步驟有4步洞坑,在這個方法中有詳細的說明盲链。其中一種方式就是通過CALayer
    的 delegate 返回 action。而對于UIView
    背后對應(yīng)的CALayer
    ,其代理就是它對應(yīng)的UIView
    刽沾,UIView
    就是用這種方式關(guān)閉了隱式動畫本慕。

動畫事務(wù)
創(chuàng)建動畫事務(wù)的目的是為了操作的原子性,保證動畫的所有修改能同時生效侧漓。CATransaction
就是動畫事務(wù)的操作類锅尘。
在創(chuàng)建隱式動畫的時候,系統(tǒng)也會隱式的創(chuàng)建一個動畫事務(wù)布蔗,以保證所有的動畫能同時進行藤违。
除此之外,還可以顯式的創(chuàng)建一個事務(wù)纵揍。顯式事務(wù)中可以定義事務(wù)中所有動畫的運行時間和時間函數(shù)顿乒,此外,還有這個方法+ (void)setDisableActions:(BOOL)flag
能顯式的關(guān)閉這個事務(wù)中的 action 查詢操作泽谨。關(guān)閉了查詢也就是關(guān)閉了動畫效果璧榄,屬性值的變化就會立即生效,而沒有動畫效果了:
[CATransaction begin]; [CATransaction setDisableActions:YES]; ///... layer.frame = CGRectOffset(layer.frame, 100, 0); ///... [CATransaction commit];

注意別把 CATransaction 和 CATransition 搞混了吧雹,一個單詞是 transaction 事務(wù)骨杂,另一個是 transition 轉(zhuǎn)變。

對比 總結(jié)
關(guān)鍵幀動畫的實現(xiàn)方式吮炕,只需要修改某個屬性值就可以了腊脱,簡單方便,但涉及的深層次內(nèi)容較多龙亲,需要更多的理解和練習陕凹。
采用逐幀動畫的實現(xiàn)方式,實現(xiàn)原理簡單鳄炉,但繪制動畫的過程要復雜杜耙。如果動畫過程處理的事情較多,也會帶來較大的開銷拂盯,就有可能造成動畫幀數(shù)的下降佑女,出現(xiàn)卡頓的現(xiàn)象,因此需要較多的測試和調(diào)試谈竿。動畫繪制的過程中团驱,會要求較多的數(shù)學、物理等知識來計算中間態(tài)的數(shù)據(jù)空凸。
但這兩種方式也不是絕對分離開的嚎花。關(guān)鍵幀動畫實現(xiàn)方式,一般只能對系統(tǒng)實現(xiàn)了可動畫的屬性做動畫處理呀洲,但其實也是允許實現(xiàn)自定義屬性的動畫處理的紊选。這就需要自己來實現(xiàn)系統(tǒng)中自動計算過渡幀的操作了啼止,也就是逐幀實現(xiàn)動畫的方式了。實現(xiàn)自定義屬性的動畫可以參考這篇文章: Layer 中自定義屬性的動畫
對于 iOS 系統(tǒng)提供的動畫方法兵罢,上面只是從整體的角度作了一個全面的整理献烦,還有很多細節(jié)內(nèi)容沒有寫出來,比如CALayer
的三維變換卖词、CAKeyframeAnimation
的延路徑動畫巩那,CAMediaTiming
的時間控制,等等坏平。感興趣的話拢操,可以再看看這些內(nèi)容:
蘋果官方文檔 Core Animation Programming Guide
iOS Core Animation: Advanced Techniques -- 中文翻譯
objc中國 動畫專題 中的 動畫解釋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锦亦,一起剝皮案震驚了整個濱河市舶替,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杠园,老刑警劉巖顾瞪,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抛蚁,居然都是意外死亡陈醒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門瞧甩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钉跷,“玉大人,你說我怎么就攤上這事肚逸∫蓿” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵朦促,是天一觀的道長膝晾。 經(jīng)常有香客問我,道長务冕,這世上最難降的妖魔是什么血当? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮禀忆,結(jié)果婚禮上臊旭,老公的妹妹穿的比我還像新娘。我一直安慰自己箩退,他們只是感情好离熏,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乏德,像睡著了一般撤奸。 火紅的嫁衣襯著肌膚如雪吠昭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天胧瓜,我揣著相機與錄音矢棚,去河邊找鬼。 笑死府喳,一個胖子當著我的面吹牛蒲肋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钝满,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兜粘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弯蚜?” 一聲冷哼從身側(cè)響起孔轴,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碎捺,沒想到半個月后路鹰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡收厨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年晋柱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诵叁。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡雁竞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拧额,到底是詐尸還是另有隱情碑诉,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布势腮,位于F島的核電站联贩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捎拯。R本人自食惡果不足惜泪幌,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望署照。 院中可真熱鬧祸泪,春花似錦、人聲如沸建芙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禁荸。三九已至右蒲,卻和暖如春阀湿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑰妄。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工陷嘴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人间坐。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓灾挨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竹宋。 傳聞我的和親對象是個殘疾皇子劳澄,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜蜈七,今天將帶大家一窺ios動畫全貌秒拔。在這里你可以看...
    每天刷兩次牙閱讀 8,495評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜宪潮,今天將帶大家一窺iOS動畫全貌溯警。在這里你可以看...
    F麥子閱讀 5,113評論 5 13
  • 什么是動畫 動畫趣苏,顧名思義狡相,就是能“動”的畫。 人的眼睛對圖像有短暫的記憶效應(yīng)食磕,所以當眼睛看到多張圖片連續(xù)快速的切...
    CoderSC閱讀 1,311評論 0 1
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫尽棕,核心動畫,幀動畫彬伦,自定義轉(zhuǎn)場動畫滔悉。 1.UIView...
    請叫我周小帥閱讀 3,101評論 1 23
  • 概覽 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜单绑,今天將帶大家一窺iOS動畫全貌回官。在這里你...
    Yiart閱讀 3,819評論 3 34