這篇文章是繼筆記-iOS設定圓角方法以及指定位置設圓角文章而寫的,因為上篇文章發出來後,沒有驗證,也有同行的朋友讓我給出一些測試資料來證實一下,所以這裡就給出一下我個人的一些測試資料,正確是否,還請大家作為參考。--------另外,我寫這個僅僅只是自己作為筆記使用,原來都是放在草稿裡的,但是手機版的無法檢視草稿,所以就發出來,沒有想過會有人來看,所以如果有錯誤的內容誤導了大家請原諒,也請發現錯誤的猿友及時幫忙提出,謝謝大家。
Core Animation工具檢測離屏渲染
對離屏渲染的檢測,蘋果為我們提供了一個測試工具Core Animation。可以在Xcode->Open Develeper Tools->Instruments中找到。
先看看第一種方式:通過設定layer的屬性
對UIImageview設定:
結果: 無離屏渲染滾動的幀率:
結果: 接近60,趨於穩定對UIButton設定:
結果: 離屏渲染滾動的幀率:
如果低於40幀每秒,普通使用者就會察覺明顯的不流暢,現在這樣app進入垃圾級別體驗了。
官方對離屏渲染產生效能問題也進行了優化:
iOS9.0之前UIImageView跟UIButton設定圓角都會觸發離屏渲染。
iOS9.0之後UIButton設定圓角會觸發離屏渲染,而UIImageView設定圓角不會觸發離屏渲染了,但是如果設定其他陰影效果之類的還是會觸發離屏渲染
第二種方式:使用貝塞爾曲線UIBezierPath和Core Graphics框架畫出一個圓角
對UIImageview設定:
幀率結果:
對UIButton設定:
幀率結果:
兩種設定均是無離屏渲染
第三種方式:使用Core Graphics框架畫出一個圓角
對UIImageview設定:
幀率結果:
幀率結果: 兩種設定均是無離屏渲染
上面兩種方式均是無離屏渲染,是什麼原因導致了掉幀?
第四種方式:使用CAShapeLayer和UIBezierPath設定圓角
對UIImageview設定:
幀率結果:
幀率結果:
兩種都是離屏渲染,掉幀更加嚴重。基本上不能使用。
由上述測試可以知道,我上篇文章裡所記筆記是有問題的。這裡的測試結果可以看的徹底。
新方法:
方法1 還是利用Core Graphics框架
對UIImageView
幀率結果:
對UIButton
幀率結果:
兩種都是無離屏渲染,不論是對UIImageView,還是對UIButton設定都OK。
方法2 通過混合圖層
此方法就是在要新增的檢視上在疊加一個部分透明的檢視,只對圓角部分進行遮擋。圖層混合的透明度處理方式與mask正好相反。
此方法沒有離屏渲染,沒有額外的CPU計算,但是應用範圍有限。
總結
- 在可以使用混合圖層遮擋的場景下,優先使用第四種方式。
- 通過.layer屬性設定,綜合效能上,還是有很大優勢的。
- 新方法的方法1由於需要大量計算和增加部分記憶體,需要實際情況去使用。