解析ios動畫原理與實(shí)現(xiàn)

解析ios動畫原理與實(shí)現(xiàn)

ID:12467564

大小:35.02 KB

頁數(shù):13頁

時(shí)間:2018-07-17

解析ios動畫原理與實(shí)現(xiàn)_第1頁
解析ios動畫原理與實(shí)現(xiàn)_第2頁
解析ios動畫原理與實(shí)現(xiàn)_第3頁
解析ios動畫原理與實(shí)現(xiàn)_第4頁
解析ios動畫原理與實(shí)現(xiàn)_第5頁
資源描述:

《解析ios動畫原理與實(shí)現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、解析iOS動畫原理與實(shí)現(xiàn)這篇文章不會教大家如何實(shí)現(xiàn)一個(gè)具體的動畫效果,我會從動畫的本質(zhì)出發(fā),來說說iOS動畫的原理與實(shí)現(xiàn)方式。什么是動畫動畫,顧名思義,就是能“動”的畫。人的眼睛對圖像有短暫的記憶效應(yīng),所以當(dāng)眼睛看到多張圖片連續(xù)快速的切換時(shí),就會被認(rèn)為是一段連續(xù)播放的動畫了。比如,中國古代的“走馬燈”,就是用的這個(gè)原理。有些人還會在一個(gè)本子每頁上手繪一些漫畫,當(dāng)快速翻頁的時(shí)候,也會看到動畫的效果,比如:計(jì)算機(jī)動畫的實(shí)現(xiàn)方式動畫是由一張張圖片組成的,在計(jì)算機(jī)中,我們稱每一張圖片為一幀畫面。如果我們想實(shí)現(xiàn)這么一個(gè)動畫:一個(gè)水杯放在桌子的左邊,移動到右邊,那么我們實(shí)際操作的,只是水杯。所

2、以動畫的實(shí)現(xiàn),只是對運(yùn)動變化了的部分的處理。逐幀與關(guān)鍵幀類似于上面提到的手繪翻頁方式,我們可以將這個(gè)水杯在每幀畫面中的位置一一找出來,這樣實(shí)現(xiàn)動畫的方式就叫作逐幀動畫,我們需要處理動畫中的每一幀。我們一般在計(jì)算機(jī)上用FPS(FramesPerSecond),即每秒的幀數(shù)來表示動畫的刷新速度,基于屏幕的刷新率等其他原因,在計(jì)算機(jī)上一般采用60FPS。如果運(yùn)動變化幅度較緩,減半到30FPS時(shí),我們?nèi)庋垡彩强山邮艿?。較低的FPS會讓我們有“卡頓”的感覺。逐幀動畫是最直接的,但要處理的幀數(shù)太多,所以實(shí)現(xiàn)過程是會麻煩。計(jì)算機(jī)的工作就是來完成重復(fù)單調(diào)的工作的,所以,有些工作是可以考慮讓計(jì)算機(jī)來

3、完成的。上面的例子,可以變成一個(gè)涉及數(shù)學(xué)和物理的問題:一個(gè)杯子初始位置在左邊,n秒后勻速運(yùn)動到右邊,那么在每1/60秒的時(shí)候,這個(gè)杯子的位置顯然是可以計(jì)算出來的了。所以,我們其實(shí)只需要指定一些關(guān)鍵信息就能讓計(jì)算機(jī)自己計(jì)算出每一幀杯子的位置了:·起始位置,比如一個(gè)坐標(biāo)(0,0)·結(jié)束位置,再比如一個(gè)坐標(biāo)(100,0)·動畫總時(shí)間,比如0.25秒·勻速運(yùn)動這種方式就稱之為關(guān)鍵幀動畫。即我們只需要給定幾個(gè)關(guān)鍵幀的畫面信息,關(guān)鍵幀與關(guān)鍵幀之間的過渡幀都將由計(jì)算機(jī)自動生成。這里說的關(guān)鍵幀動畫,是指的廣義上的一種動畫制作方式,并不僅指CAKeyframeAnimation,CABasicAni

4、mation的實(shí)現(xiàn)方式也屬于關(guān)鍵幀動畫iOS動畫說完廣義上的動畫,就可以來說說iOS的動畫了。先來說說動畫的本質(zhì)。動畫的本質(zhì)繼續(xù)用上面的簡單例子:一個(gè)UIView從(0,0)勻速移動到(100,0)的動畫,動畫總時(shí)間是0.25秒。假設(shè)我們基于60FPS來顯示動畫,那么在0.25秒內(nèi)就應(yīng)該有15幀畫面,在每幀畫面中,這個(gè)UIView的x坐標(biāo),每次應(yīng)移動100/15的距離。如果我們每隔0.25/15秒刷新一次UIView的x坐標(biāo),那么就能實(shí)現(xiàn)這個(gè)動畫效果了。對于x坐標(biāo)而言,每幀的位置就可以通過一個(gè)基于時(shí)間變化量的函數(shù)來求得:x=f(t)。所以,一個(gè)動畫的本質(zhì),就是動畫對象(這里是UIV

5、iew)的狀態(tài),基于時(shí)間變化的反應(yīng)了。簡單說,就是給定任意一個(gè)時(shí)刻,如果你都能得到這個(gè)動畫對象的位置和、形狀等等屬性,你就能實(shí)現(xiàn)這個(gè)動畫了。屬性值的變化,既可能是位置、透明度、旋轉(zhuǎn)角度等的變化,也包括形狀的改變,比如從一條直線變化成一個(gè)圓圈,目標(biāo)就是要得到變化過程中特定時(shí)刻的中間態(tài)。動畫的實(shí)現(xiàn)我們也可將iOS的動畫分為兩大類:·系統(tǒng)提供的關(guān)鍵幀動畫實(shí)現(xiàn)方式;用戶指定關(guān)鍵信息,系統(tǒng)實(shí)現(xiàn)動畫過程,對用戶而言操作起來會簡單些。·逐幀動畫實(shí)現(xiàn)方式;用戶自己畫出每一幀畫面,系統(tǒng)操作方法簡單,但用戶操作的工作量就會大一些。逐幀動畫實(shí)現(xiàn)方式簡單的說,要實(shí)現(xiàn)逐幀的方式,就是需要周期性的調(diào)用繪制方法

6、,繪制每幀的動畫對象。這里說的繪制,不光是指覆寫UIView的-drawRect:的方法來手動重繪視圖,也包括修改UIView它的屬性,比如位置、顏色等。iOS的動畫都是基于CALayer的,iOS的UIView背后都有一個(gè)對應(yīng)的CALayer。對UIView的修改實(shí)際上都是對背后CALayer的修改。但如果在逐幀繪制的方法中修改了一個(gè)自建的CALayer,這個(gè)CALayer不是對應(yīng)某個(gè)UIView的,需注意系統(tǒng)的隱式動畫的影響,后面會提到這點(diǎn)。而周期性,就需要一個(gè)定時(shí)器來完成了,即CADisplayLink。CADisplayLink與NSTimer比較類似,可以周期性的調(diào)用指定

7、的方法。之所以用CADisplayLink,是因?yàn)樗腔谄聊凰⑿侣实?,即屏幕每次刷新時(shí)就會觸發(fā)調(diào)用。iPhone的屏幕刷新率是60FPS。如果繪制過程過于復(fù)雜,不能在屏幕刷新一幀的時(shí)間內(nèi)完成,可以考慮改為每隔一幀繪制,相當(dāng)于是30FPS的刷新率。不然可能會使動畫不連貫,有卡頓感。用逐幀方法繪制的原理不是很麻煩,麻煩的是繪制過程。對于一個(gè)復(fù)雜動畫,你可能需要運(yùn)用各種物理、幾何知識去計(jì)算視圖中間狀態(tài)的信息。比如要實(shí)現(xiàn)一條直線卷曲變化為一個(gè)圓的動畫,你就需要計(jì)算出中間態(tài)的

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。