以下都是 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