OC總結(jié)篇 - UI視圖

UI視圖 - 圖像顯現(xiàn)原理和滑動優(yōu)化
UI視圖 - UI事件傳遞及視圖響應鏈
UI視圖 - UITableView重用池機制及優(yōu)化
UI視圖-屏幕適配

圖像顯現(xiàn)原理
CPU - GPU - 幀緩沖區(qū) - 屏幕

1.VSync信號(16.7ms顯示一幀畫面)
2.VSync信號結(jié)果放入幀緩沖區(qū)
3.提取幀緩沖區(qū)內(nèi)容,顯示到顯示器上

下面看下在16.7ms內(nèi)計算機做了什么
CPU - 提交位圖 - GPU

"***我們可以分別對CPU和GPU做滑動優(yōu)化***"

***CPU做了什么 - UI布局,文本計算,繪制,圖片編解碼***
             可做的優(yōu)化 
                 - 在子線程中進行對象的創(chuàng)建,調(diào)整和銷毀
                 -在子線程中預排版(布局計算,文本計算)
                 -讓主線程有更多的時間去響應用戶的交互
                 -預渲染(文本等異步繪制,圖片編解碼等)

***GPU做了什么 - 圖層合成,紋理渲染***
             可做的優(yōu)化
                 -紋理渲染方面的優(yōu)化:避免離屏渲染             
                       -避免設置視圖的圓角屬性(必須同時maskToBounds為YES才會觸發(fā))
                       -避免設置視圖的圖層蒙版
                       -避免設置陰影
                       -避免設置光柵化     
                 -圖層合成方面的優(yōu)化:減少視圖層級復雜度

UIView的繪制原理
[view setNeedsDisplay]并不是立刻繪制,而是進入下面流程
1. [layer setNeedsDisplay]
2. 判斷l(xiāng)ayer的代理方法displayLayer是否實現(xiàn)
3. 實現(xiàn)了,進行異步繪制
4. 未實現(xiàn),進行系統(tǒng)調(diào)用

"異步繪制"
代理通過CGBitmapContextCreat方法創(chuàng)建位圖上下文
通過CoreGraphic的相關API,可以做當前UI控件的一些繪制工作
通過CGBitmapContextCreatImage方法,根據(jù)所繪制的上下文,生成一張CGImage圖片
回到主隊列中,提交這個位圖
設置給CALayer的contents屬性

"系統(tǒng)調(diào)用"
CALayer內(nèi)部創(chuàng)建CGContextRef,CALayer上傳對應的context給GPU
它有代理 - 調(diào)用代理方法,做當前視圖的繪制工作,[UIView drawRect],這一步可以通過堆棧中的上下文取出context
沒有代理 - [CALayer drawInContext]
UIView和CALayer
UIView只負責事件傳遞及視圖響應鏈的機制
CALayer只負責內(nèi)容contents的顯示
UI事件傳遞

主要方法
hitTest
pointInside

當點擊了屏幕,點擊事件傳遞給UIApplication - UIWindow -在UIWindow里面會判斷hitTest,來返回最終的響應視圖
內(nèi)部實現(xiàn)
1.先判斷是否可交互,是否隱藏以及是否透明
2.調(diào)用pointInside,判斷當前點擊的點是否在UIWindow范圍內(nèi)
    是的話,倒序遍歷UIWindow的子視圖,來查找最終響應事件的視圖
    不是的話,返回UIWindow
UI視圖響應鏈

主要方法
touchesBegan
touchesMoved
touchesEnded

首先找到當前響應的view看它能否處理這個事件
view - 父視圖 - UIApplicationDelegate - 事件被忽略
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容