CALayer
UIView = 繪制 + 響應觸摸事件
- 負責屏幕和顯示信姓,不負責觸摸事件響應鏈
- UIView是其高級封裝
- 和UIView層級一一對應
UIView未暴露CALayer的接口
- 陰影,圓角蚁孔,帶顏色的邊框
- 3D變換
- 非矩形范圍
- 透明遮罩
- 多級非線性動畫
圖形和幾何
frame:外部坐標苟鸯,父圖層坐標,大小為邊與xy軸平行能完全容納圖層的最小矩形
bounds:內(nèi)部坐標,自身坐標纪隙,大小為圖層大小的矩形
anchorPoint:錨點,旋轉(zhuǎn)基點扛或,左上角{0绵咱,0},右下角{1熙兔,1}
center(CALayer的position):anchorPoint在父圖層的坐標
視覺效果
拉伸過濾
以正確比例和1:1像素顯示圖片在屏幕上的好處
- 畫質(zhì)好悲伶,像素無壓縮拉伸
- 更好使用內(nèi)存
- 性能好,無需額外計算
CAShapeLayer
矢量圖像而不是bitmap繪制圖層子類
優(yōu)點:
- 渲染快速住涉,硬件加速
- 高效使用內(nèi)存麸锉,占用小
- 不受邊界裁剪,可在邊界外繪制
- 不會出現(xiàn)像素化
CATextLayer
CALayer的子類舆声,幾乎擁有UILabel所有繪制特性
渲染快于UILabel花沉,運用Core text
性能調(diào)優(yōu)
動畫和圖層被單獨的渲染服務進程處理
動畫發(fā)生過程
- 布局
- 顯示
- 準備-發(fā)送動畫數(shù)據(jù)到渲染服務
- 提交-打包圖層和動畫屬性發(fā)送到渲染服務
- 對所有圖層屬性計算中間值柳爽,設置OpenGL幾何形狀(紋理化三角形)進行渲染
- 在屏幕上渲染可見三角形(GPU執(zhí)行,前面都在CPU)
可能影響GPU繪制的情況
- 過多幾何結(jié)構(gòu)
- 重繪-重疊半透明圖層
- 離屏渲染-為屏幕外渲染的圖片分配額外內(nèi)存碱屁,切換屏幕內(nèi)外的繪制上下文
- 過大的圖片
可能影響CPU計算的情況
- 布局計算-自動布局
- 視圖懶加載-涉及IO的圖片顯示
- Core Graphics繪制-drawRect(為支持圖層任意繪制需要在內(nèi)存中創(chuàng)建一個等大小的寄宿圖)
- 解壓圖片
圖像IO
- 線程加載-合適的后臺線程
- 分辨率交換-移動時低分辨率磷脯,靜態(tài)時加載高分辨率
- 緩存-考慮因素:合適緩存鍵、緩存時機娩脾、失效赵誓、回收
- 圖像格式
文本
盡可能避免改變文本的frame,因為需要重繪
光柵化
將圖層及其所有效果繪制成一個屏幕外的圖像并緩存柿赊,避免運用在內(nèi)容不斷變動的圖層上
離屏渲染
在混合復雜效果無法直接渲染時俩功,會通過分步渲染,會把分布渲染的結(jié)果臨時儲存在屏幕外的內(nèi)存中等待組合渲染
影響性能在于
- 為臨時儲存部分渲染結(jié)果分配內(nèi)存
- 進行將渲染結(jié)果從屏幕內(nèi)-外的上下文切換
圖層的屬性觸發(fā)離屏渲染
- 圓角+maskToBounds
- 圖層蒙版
- 陰影
圖層混合
- 設定固定不透明的背景顏色
- 設置layer的opaue屬性默認為YES(非view的)
顏色格式
蘋果的GPU只解析32bit的顏色格式闹瞧,其余的格式CPU會先進行顏色格式轉(zhuǎn)換绑雄,再讓GPU渲染。
圖像大小縮放
image和imageView的大小盡量保持一致奥邮,避免在改變view大小時重復計算縮放