本文只用来做笔记 ,对看过的一些文章做自己的实践
基础内容
- CALayer
离屏渲染的原因有哪些?
1.设置圆角
系统圆角
let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
// myView.backgroundColor = UIColor.purple
myView.layer.backgroundColor = UIColor.purple.cgColor
myView.layer.contents = UIImage(named: "jianbian")?.cgImage
myView.layer.cornerRadius = 50
myView.layer.masksToBounds = true
view.addSubview(myView)
设置圆角,并且进行裁剪.如上所诉Layer的结构,如果只设置圆角的话,只对背景色和border
边框起作用,如果Layer
的contents
有内容的话,合成的时候圆角就会显示不出来,还需要做一个圆角出来,设置masksToBounds
为true
只设置cornerRadius
是不会触发离屏渲染的,只有当cornerRadius>0
并且masksToBounds
设置为true
,并且设置了backgroundColor
才会触发离屏渲染(这是自己得出的结论).
系统圆角.png | 优化圆角.png |
---|
圆角优化的几种方案
- 使用带圆角的透明图案
- 使用
CoreGraphics
绘制圆角
2.设置阴影
let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.layer.backgroundColor = UIColor.purple.cgColor
myView.layer.contents = UIImage(named: "jianbian")?.cgImage
view.addSubview(myView)
// 阴影测试
myView.layer.shadowColor = UIColor.blue.cgColor
myView.layer.shadowOffset = CGSize(width: 10, height: 10)
myView.layer.shadowOpacity = 1.0
阴影
如上图使用instruments
检测到离屏渲染,代码做如下优化,对阴影指定路径
//设定路径:与视图的边界相同
let path = UIBezierPath(rect: myView.bounds)
myView.layer.shadowPath = path.cgPath
3.设置mask
let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
myView.layer.backgroundColor = UIColor.purple.cgColor
myView.layer.contents = UIImage(named: "jianbian")?.cgImage
view.addSubview(myView)
let maskLayer = CALayer()
maskLayer.frame = myView.bounds
maskLayer.contents = UIImage(named: "jianbian")?.cgImage
myView.layer.mask = maskLayer
mask
网友评论