iOS圓角避免離屏渲染

2021-08-21 18:16:12 字數 2197 閱讀 9531

寫在前面

**已經整理到nxlib的 nx_circleview, nx_circleimage 中, 在列表中使用圓角時建議使用這個方式.

參考閱讀

閱讀原文 ios可自選切割角的圓角切割工具 (避免離屏渲染) - skarchcutter 簡述

skarchcutter,是乙個可自選切割角的圓角切割工具,同時支援uiview、uiimageview、uibutton和uilabel的單角切圓/選角拱形切圓/全形切圓,並且避免了uiimageview使用系統圓角所導致的離屏渲染的問題,以及確保layer物件的maskstobounds屬性始終為no,從而使得專案中大量使用圓角時的效能得到很大程度的優化, 最重要的是使用簡單、方便。如果覺得還不錯,star支援下吧~

為什麼要避免離屏渲染?

我們先來說說離屏渲染的影響:

在介面的滾動過程中如果有大量的離屏渲染發生時會嚴重影響幀率。

那麼離屏渲染會因為什麼原因被觸發呢:

官方公開的的資料提到了盡量避免會觸發離屏渲染的效果:mask, shadow, group opacity, edge antialiasing。

使用系統提供的圓角效果也會觸發離屏渲染, 如:

imageview.layer

.cornerradius = 5

imageview.layer

.maskstobounds = yes

當然,能夠觸發離屏渲染的因素遠不止上述這些,這裡僅僅是舉例。

skarchcutter的作用是什麼?

方便、快捷的幫助你從任意邊角進行圓角的切割(如:半圓矩形、只有乙個角是圓角的矩形、整體圓角切割等)

同時支援uiview、uiimageview、uibutton和uilabel

避免了系統圓角導致的離屏渲染問題,確保layer物件的maskstobounds屬性始終為no,提公升了大量使用圓角時的效能流暢性,減小了cpu和gpu的消耗

避免了因工作執行緒的延遲,而導致閃爍的現象,這裡學習了hjcornerradius的思路

效果圖

測試效能

ps:錄製的幀數已經跟不上螢幕滑動的速度了,足以說明滑動的流暢性有多高了

如何開始

1.從github上clone–>skarchcutter,然後檢視demo

2.直接將目錄下的skarchcutter拷貝到工程中,或在podfile資料夾中新增 pod 『skarchcutter』

3.覺得不錯的話,點個star吧~

使用方法

標頭檔案匯入

#import 

"skarchcutter.h"

skarchcutter * archcutter = [[skarchcutter alloc] init];

進行圓角切割

喜歡的話點個star哦~

iOS 切圓角離屏渲染問題

gpu螢幕渲染有兩種方式 1 on screen rendering 當前螢幕渲染 指的是gpu的渲染操作是在當前顯示的螢幕緩衝區進行。2 off screen rendering 離屏渲染 指的是gpu在當前螢幕緩衝區以外開闢乙個緩衝區進行渲染操作。離屏渲染的代價很高體現在兩個方面,1 需要建立乙...

iOS之離屏渲染

on screen rendering 意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。off screen rendering 意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。特殊的離屏渲染 如果將不在gpu的當前螢幕緩衝區中進行的渲染都稱為...

iOS 離屏渲染研究

gpu渲染機制 gpu螢幕渲染有以下兩種方式 離屏渲染的觸發方式 設定了以下屬性時,都會觸發離屏繪製 其中shouldrasterize 光柵化 是比較特別的一種 光柵化概念 將圖轉化為乙個個柵格組成的圖象。光柵化特點 每個元素對應幀緩衝區中的一畫素。shouldrasterize yes在其他屬性...