離屏渲染

以下都是 Xcode Debug 檢測(cè)結(jié)果

一、常用的控件 layer.masksToBounds 不產(chǎn)生離屏渲染的情況:

1、UILabel(無論有無背景和text)、
2、UIImageView(無論有無背景和image)
3、UIButton(無論有無背景和title, 有 image 不行)
4、UIView子視圖無任何可顯示的背景顏色、圖片或者文字時(shí)

二、 layer.masksToBounds 產(chǎn)生離屏渲染的情況

1、UIButton 設(shè)置了 image 時(shí)
2、UIView 的子視圖有背景色,或者有文字、圖片時(shí)

可以得出:

1、視圖設(shè)置陰影必定產(chǎn)生離屏渲染。
2、有子視圖,并且子視圖有顏色、文字、圖片可顯示的情況,父視圖使用 layer.masksToBounds 就會(huì)產(chǎn)生離屏渲染。
3、有可顯示的子視圖中,設(shè)置父視圖的alpha,0 < alpha < 1 就會(huì)產(chǎn)生離屏渲染。
4、毛玻璃效果UIVisualEffect

三、化解設(shè)置陰影產(chǎn)生離屏渲染

someView.layer.shadowColor = UIColor.brown.cgColor
someView.layer.shadowOffset = CGSize(width: 4, height: 4)
someView.layer.shadowOpacity = 0.8
// 設(shè)置陰影后,加上shadowPath路徑,提前告訴CoreAnimation你要渲染的View的形狀Shape,就會(huì)減少離屏渲染計(jì)算
someView.layer.shadowPath = UIBezierPath(rect: someView.bounds).cgPath

// 如果 someView 設(shè)置了圓角則用:
// someView.layer.shadowPath = UIBezierPath(roundedRect: someView.bounds, cornerRadius: 20).cgPath

具體看這里:https://zhuanlan.zhihu.com/p/72653360

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 目錄 離屏渲染的本質(zhì)如何設(shè)置圓角(三種方法)Shadow 陰影MaskGroupOpacityEdgeAntial...
    路飛_Luck閱讀 2,111評(píng)論 0 9
  • 寫iOS的第一天可能大部分coder都會(huì)接觸到UIView,然后慢慢地當(dāng)我們需要加圓角、做動(dòng)畫、加漸變的時(shí)候我們就...
    木小易Ying閱讀 2,200評(píng)論 0 7
  • 一、概述 OpenGL ES是一套多功能開放標(biāo)準(zhǔn)的用于嵌入系統(tǒng)的C-based的圖形庫(kù),用于2D和3D數(shù)據(jù)的可視化...
    半島夏天閱讀 362評(píng)論 0 2
  • GPU渲染機(jī)制 CPU 計(jì)算好顯示內(nèi)容提交到 GPU,GPU 渲染完成后將渲染結(jié)果放入幀緩沖區(qū),隨后視頻控制器會(huì)按...
    荒漠現(xiàn)甘泉閱讀 917評(píng)論 0 2
  • 圖像顯示原理 圖像顯示的大概流程: 程序運(yùn)行從內(nèi)存中讀取數(shù)據(jù)對(duì)圖片進(jìn)行解壓得到像素?cái)?shù)據(jù),若GPU不支持圖片的顏色格...
    foreverSun_122閱讀 720評(píng)論 0 2

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