Core Animation是蘋果提供的一套基于繪圖的動畫框架,在iOS的繪圖框架中最底層為圖形硬件服務曲秉,上面是使用C語言封裝的一臺應用層API钱床,在上面就是Core Animation框架观堂。
Core Animation框架中最核心的類是CAAnimation督赤,封裝了動畫對象的基本屬性,包括三個子類:
CAPropertyAnimation類:創(chuàng)建屬性動畫.
CAAnimationGroup類:創(chuàng)建組合動畫.
CATransition類:轉場動畫.
iOS繪圖技術
1.屏幕渲染原理
頁面的卡頓是由于頁面刷新頻率過低造成的浓利,正常是每秒刷新60次挤庇。
為了解決GPU的圖像渲染速度和顯示屏的刷新速度一致,屏幕渲染時會采用緩存區(qū)加垂直同步的技術來保證不產(chǎn)生屏幕撕裂贷掖。
緩存區(qū)是指當GPU渲染圖形數(shù)據(jù)之后嫡秕,先將其緩存起來,屏幕需要刷新的時候再從緩存區(qū)獲取刷新苹威,為了保證在緩存區(qū)中的圖像數(shù)據(jù)被屏幕都去完成之后再放入新的緩存數(shù)據(jù)昆咽,緩存區(qū)還分兩部分,一部分是幀緩存區(qū)牙甫,一部分你是后備緩存區(qū)掷酗,當幀緩存區(qū)被屏幕渲染之后后備緩存去的數(shù)據(jù)會被復制到幀緩存區(qū)中,等屏幕下次刷新使用窟哺。
2.iOS頁面內(nèi)渲染過程
應用程序---》UIkit---》Core Graphics,Core Animation,Core Image---》OpenGL ES ----》GPU 驅動----》顯示屏渲染
3.頁面性能優(yōu)化
1)減少圖層數(shù)量泻轰,和變化
CPU:對象創(chuàng)建耗時,布局計算耗時且轨,圖片加載解壓耗時浮声,圖像繪制數(shù)據(jù)處理耗時
????????1.布局的計算 - 如果你的視圖層級太過于復雜,或者視圖需要重復多次進行布局旋奢,尤其是在使用 Auto Layout 進行自動布局時泳挥,對性能影響尤為嚴重;
????????2.視圖的惰性加載 - 在 iOS 中只有當視圖控制器的視圖顯示到屏幕時才會加載至朗;
????????3.解壓圖片 - iOS 通常會在真正繪制時才會解碼圖片屉符,對于一個較大的圖片,無論是直接或間接使用 UIImageView 或者繪制到 Core Graphics 中锹引,都需要對圖片進行解壓矗钟;
????????4.大多數(shù)的 CALayer 的屬性都是由 GPU 來繪制的,比如圖片的圓角嫌变、變換真仲、應用紋理;但是過多的幾何結構初澎、重繪、離屏繪制(Offscrren)以及過大的圖片都會導致 GPU 的性能明顯降低。
2)合理使用離屏渲染
? ? 離屏渲染:在當前屏幕緩存區(qū)外開辟一個新的緩存區(qū)進行渲染碑宴。
? ? 離屏渲染本身是圖形渲染技術的一種優(yōu)化软啼,可以在圖像真正被渲染之前做很多與處理的事情,比如圖層合成等延柠;
? ? 但是離屏渲染的使用代價是很高的祸挪,首先,需要額外開辟一塊緩存區(qū)進行渲染操作贞间,其次贿条,在離屏渲染結束后,要將離屏渲染的內(nèi)容在屏幕上顯示增热,需要切換繪制上下文整以。不合理的觸發(fā)離屏渲染會造成嚴重的性能損耗。
? ? 使用了圖片的UIIButton峻仇,UILabel等組件的圓角會觸發(fā)離屏渲染公黑,建議使用圓角圖片。