Core Animation是蘋果提供的一套基于繪圖的動(dòng)畫框架,在iOS的繪圖框架中最底層為圖形硬件服務(wù),上面是使用C語(yǔ)言封裝的一臺(tái)應(yīng)用層API,在上面就是Core Animation框架。
Core Animation框架中最核心的類是CAAnimation,封裝了動(dòng)畫對(duì)象的基本屬性,包括三個(gè)子類:
CAPropertyAnimation類:創(chuàng)建屬性動(dòng)畫.
CAAnimationGroup類:創(chuàng)建組合動(dòng)畫.
CATransition類:轉(zhuǎn)場(chǎng)動(dòng)畫.
iOS繪圖技術(shù)
1.屏幕渲染原理
頁(yè)面的卡頓是由于頁(yè)面刷新頻率過(guò)低造成的,正常是每秒刷新60次。
為了解決GPU的圖像渲染速度和顯示屏的刷新速度一致,屏幕渲染時(shí)會(huì)采用緩存區(qū)加垂直同步的技術(shù)來(lái)保證不產(chǎn)生屏幕撕裂。
緩存區(qū)是指當(dāng)GPU渲染圖形數(shù)據(jù)之后,先將其緩存起來(lái),屏幕需要刷新的時(shí)候再?gòu)木彺鎱^(qū)獲取刷新,為了保證在緩存區(qū)中的圖像數(shù)據(jù)被屏幕都去完成之后再放入新的緩存數(shù)據(jù),緩存區(qū)還分兩部分,一部分是幀緩存區(qū),一部分你是后備緩存區(qū),當(dāng)幀緩存區(qū)被屏幕渲染之后后備緩存去的數(shù)據(jù)會(huì)被復(fù)制到幀緩存區(qū)中,等屏幕下次刷新使用。
2.iOS頁(yè)面內(nèi)渲染過(guò)程
應(yīng)用程序---》UIkit---》Core Graphics,Core Animation,Core Image---》OpenGL ES ----》GPU 驅(qū)動(dòng)----》顯示屏渲染
3.頁(yè)面性能優(yōu)化
1)減少圖層數(shù)量,和變化
CPU:對(duì)象創(chuàng)建耗時(shí),布局計(jì)算耗時(shí),圖片加載解壓耗時(shí),圖像繪制數(shù)據(jù)處理耗時(shí)
????????1.布局的計(jì)算 - 如果你的視圖層級(jí)太過(guò)于復(fù)雜,或者視圖需要重復(fù)多次進(jìn)行布局,尤其是在使用 Auto Layout 進(jìn)行自動(dòng)布局時(shí),對(duì)性能影響尤為嚴(yán)重;
????????2.視圖的惰性加載 - 在 iOS 中只有當(dāng)視圖控制器的視圖顯示到屏幕時(shí)才會(huì)加載;
????????3.解壓圖片 - iOS 通常會(huì)在真正繪制時(shí)才會(huì)解碼圖片,對(duì)于一個(gè)較大的圖片,無(wú)論是直接或間接使用 UIImageView 或者繪制到 Core Graphics 中,都需要對(duì)圖片進(jìn)行解壓;
????????4.大多數(shù)的 CALayer 的屬性都是由 GPU 來(lái)繪制的,比如圖片的圓角、變換、應(yīng)用紋理;但是過(guò)多的幾何結(jié)構(gòu)、重繪、離屏繪制(Offscrren)以及過(guò)大的圖片都會(huì)導(dǎo)致 GPU 的性能明顯降低。
2)合理使用離屏渲染
? ? 離屏渲染:在當(dāng)前屏幕緩存區(qū)外開(kāi)辟一個(gè)新的緩存區(qū)進(jìn)行渲染。
? ? 離屏渲染本身是圖形渲染技術(shù)的一種優(yōu)化,可以在圖像真正被渲染之前做很多與處理的事情,比如圖層合成等;
? ? 但是離屏渲染的使用代價(jià)是很高的,首先,需要額外開(kāi)辟一塊緩存區(qū)進(jìn)行渲染操作,其次,在離屏渲染結(jié)束后,要將離屏渲染的內(nèi)容在屏幕上顯示,需要切換繪制上下文。不合理的觸發(fā)離屏渲染會(huì)造成嚴(yán)重的性能損耗。
? ? 使用了圖片的UIIButton,UILabel等組件的圓角會(huì)觸發(fā)離屏渲染,建議使用圓角圖片。