筆記-圓角四種方法的對比以及性能檢測

這篇文章是繼筆記-iOS設置圓角方法以及指定位置設圓角文章而寫的,由於上篇文章發出來後,沒有驗證,也有同行的朋友讓我給出一些測試數據來證明一下,因此這裏就給出一下我我的的一些測試數據,正確是否,還請你們做爲參考。--------另外,我寫這個僅僅只是本身做爲筆記使用,原來都是放在草稿裏的,可是手機版的沒法查看草稿,因此就發出來,沒有想過會有人來看,因此若是有錯誤的內容誤導了你們請原諒,也請發現錯誤的猿友及時幫忙提出,謝謝你們。app

Core Animation工具檢測離屏渲染

對離屏渲染的檢測,蘋果爲咱們提供了一個測試工具Core Animation。能夠在Xcode->Open Develeper Tools->Instruments中找到。框架

先看看第一種方式:經過設置layer的屬性

對UIImageview設置:工具

無離屏渲染
結果: 無離屏渲染

滾動的幀率:post

結果: 接近60,趨於穩定

對UIButton設置:性能

離屏渲染
結果: 離屏渲染

滾動的幀率: 測試

若是低於40幀每秒,普通用戶就會察覺明顯的不流暢,如今這樣app進入垃圾級別體驗了。優化

官方對離屏渲染產生性能問題也進行了優化:

iOS9.0以前UIImageView跟UIButton設置圓角都會觸發離屏渲染。

iOS9.0以後UIButton設置圓角會觸發離屏渲染,而UIImageView設置圓角不會觸發離屏渲染了,可是若是設置其餘陰影效果之類的仍是會觸發離屏渲染

第二種方式:使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個圓角

對UIImageview設置:
幀率結果: 3d

對UIButton設置:
幀率結果:code

兩種設置均是無離屏渲染cdn

第三種方式:使用Core Graphics框架畫出一個圓角

對UIImageview設置:
幀率結果:

對UIButton設置:
幀率結果:
兩種設置均是無離屏渲染

上面兩種方式均是無離屏渲染,是什麼緣由致使了掉幀?

第四種方式:使用CAShapeLayer和UIBezierPath設置圓角

對UIImageview設置:
幀率結果:

對UIButton設置:
幀率結果:

兩種都是離屏渲染,掉幀更加嚴重。基本上不能使用。

由上述測試能夠知道,我上篇文章裏所記筆記是有問題的。這裏的測試結果能夠看的完全。

新方法:

方法1 仍是利用Core Graphics框架

對UIImageView

幀率結果:

對UIButton

幀率結果:

兩種都是無離屏渲染,不管是對UIImageView,仍是對UIButton設置都OK。

方法2 經過混合圖層
此方法就是在要添加的視圖上在疊加一個部分透明的視圖,只對圓角部分進行遮擋。圖層混合的透明度處理方式與mask正好相反。 此方法沒有離屏渲染,沒有額外的CPU計算,可是應用範圍有限。

總結

  • 在可使用混合圖層遮擋的場景下,優先使用第四種方式。
  • 經過.layer屬性設置,綜合性能上,仍是有很大優點的。
  • 新方法的方法1因爲須要大量計算和增長部份內存,須要實際狀況去使用。
相關文章
相關標籤/搜索