发布时间:2018-03-29责任编辑:朱明 浏览:2390
在TableView中使用cornerRadius和maskToBounds共同设置查看的圆角是最常见的引发离屏渲染性能问题的场景。
为视图设置圆角时触发离屏渲染
cell.view.layer.cornerRadius = 15
cell.view.layer.masksToBounds = true
cornerRadius和maskToBounds分别独立使用的时候不会有性能问题,但是当他们结合在一起,就触发了离屏渲染。
注:在iOS9之后的系统中UIImageView使用png图片设置圆角时被苹果优化,不会触发离屏渲染.contents为空的视图如UIView也不会触发离屏渲染。但是其他类型的视图(如UILabel ,UIButton的),通过这种方式设置圆角依然会触发离屏渲染。
CAShapeLayer
可以使用UIBezierPath的构造器产生init(roundedRect rect: CGRect, cornerRadius: CGFloat)圆角,避免离屏渲染。
let blueLayer = CAShapeLayer()
blueLayer.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
blueLayer.fillColor = UIColor.blue.cgColor
blueLayer.path = UIBezierPath.init(roundedRect: CGRect(x:0, y:0, width:100, height:100) , cornerRadius: 20).cgPath
self.view.layer.addSublayer(blueLayer)
使用 Core Graphics 绘制圆角
在对视图绘制圆角的时候,为了避免离屏渲染,可以通过 Core Graphics 将视图重新绘制为一张带圆角的图片。
注意:如果我们重写了 drawRect 方法,并且使用 Core Graphics 进行绘制作,就涉及到了 CPU 渲染。整个渲染过程由 CPU 完成,渲染得到的 bitmap 最后再交由 GPU 用于显示。
项目开发 供稿