UI效能優化
措施
1、避免圖層混合
- 確保控制元件的
opaque
屬性設定為true
,確保backgroundColor
和父檢視顏色一致且不透明 - 如無特殊需要,不要設定低於1的
alpha
值 - 確保
UIImage
沒有alpha通道
2、避免臨時轉換
- 確保圖片大小和
frame
一致,不要在滑動時縮放圖片 - 確保圖片顏色格式被GPU支援,避免勞煩CPU轉換
3、慎用離屏渲染
- 絕大多數時候離屏渲染會影響效能
- 重寫
drawRect
方法,設定圓角、陰影、模糊效果,光柵化都會導致離屏渲染 - 設定陰影效果是加上陰影路徑
- 滑動時若需要圓角效果,開啟光柵化
UIView與CALayer
在iOS系統中所有顯示的檢視都是從基類UIView繼承而來的,同時UIView負責接收使用者互動。但是實際上你所看到的檢視內容,包括圖形等,都是由UIView的一個例項圖層屬性來繪製和渲染的,那就是CALayer。
CALayer類的概念與UIView非常類似,它也具有樹形的層級關係,並且可以包含圖片文字、背景色等。它與UIView最大的不同在於它不能響應使用者互動,可以說它根本就不知道響應鏈的存在,它的API雖然提供了“某點是否在圖層範圍內的方法”,但是它並不具有響應的能力。
在每一個UIView例項當中,都有一個預設的支援圖層,UIView負責建立並且管理這個圖層。實際上這個CALayer圖層才是真正用來在螢幕上顯示的,UIView僅僅是對它的一層封裝,實現了CALayer的delegate,提供了處理事件互動的具體功能,還有動畫底層方法的高階API。
可以說CALayer是UIView的內部實現細節。
圓角與離屏渲染
總結
- 如果能夠只用 cornerRadius 解決問題,就不用優化。
- 如果必須設定 masksToBounds,可以參考圓角檢視的數量,如果數量較少(一頁只有幾個)也可以考慮不用優化。
- UIImageView 的圓角通過直接擷取圖片實現,其它檢視的圓角可以通過 Core Graphics 畫出圓角矩形實現。
設定圓角很簡單,它不會帶來任何效能損耗
view.layer.cornerRadius = 5
這行程式碼不會產生額外的效能損耗。在預設情況下,這個屬性只會影響檢視的背景顏色和 border。對於 UILabel 這樣內部還有子檢視的控制元件就無能為力了。所以很多情況下我們會看到這樣的程式碼:
label.layer.cornerRadius = 5
label.layer.masksToBounds = true
正確的做法是對於UIView,自己畫一個帶圓角的背景圖,建立一個imageView插入到檢視底層。對於UIImageView來說是直接擷取圖片,然後圓角路徑直接用貝塞爾曲線繪製,這樣來生成一個複合圖片。
1.記憶體惡鬼drawRect
2.iOS 高效新增圓角效果實戰講解
3.效能調優實戰
4.iOS 保持介面流暢的技巧
5.iOS Core Animation: Advanced Techniques中文譯本
6.使用 ASDK 效能調優 - 提升 iOS 介面的渲染效能
相關文章
- 效能優化(二) UI 繪製優化優化UI
- 六、Android效能優化之UI卡頓分析之渲染效能優化Android優化UI
- Android效能優化(4):UI渲染機制以及優化Android優化UI
- UI技術總結--效能優化UI優化
- 【前端效能優化】vue效能優化前端優化Vue
- 效能優化優化
- 前端效能優化(JS/CSS優化,SEO優化)前端優化JSCSS
- Android效能優化——效能優化的難題總結Android優化
- Android 效能優化 ---- 啟動優化Android優化
- Android效能優化----卡頓優化Android優化
- [效能優化]DateFormatter深度優化探索優化ORM
- 前端效能優化 --- 圖片優化前端優化
- 效能優化|Tomcat 服務優化優化Tomcat
- php效能優化PHP優化
- 前端效能優化前端優化
- oracle 效能優化Oracle優化
- Spark效能優化Spark優化
- mysql效能優化MySql優化
- MySQL——效能優化MySql優化
- React 效能優化React優化
- 效能優化篇優化
- Redis 效能優化Redis優化
- python效能優化Python優化
- 效能優化有感優化
- javascript效能優化JavaScript優化
- JVM效能優化JVM優化
- Javascript 效能優化JavaScript優化
- java效能優化Java優化
- react效能優化React優化
- Canvas效能優化Canvas優化
- mongodb效能優化MongoDB優化
- Android效能優化Android優化
- EF效能優化優化
- TableView效能優化View優化
- web效能優化Web優化
- javasciprt效能優化Java優化
- 關於UI事件傳遞,影像顯示,效能優化,離屏渲染UI事件優化
- 【效能優化】秒殺系統效能優化初體驗優化