iOS性能优化之视图圆角-新闻详情

iOS性能优化之视图圆角


发布时间:2018-03-29责任编辑:朱明 浏览:2390


TableView中使用cornerRadiusmaskToBounds共同设置查看的圆角是最常见的引发离屏渲染性能问题的场景。

 

为视图设置圆角时触发离屏渲染

cell.view.layer.cornerRadius = 15

cell.view.layer.masksToBounds = true

cornerRadiusmaskToBounds分别独立使用的时候不会有性能问题但是当他们结合在一起就触发了离屏渲染。

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 用于显示。

 

 项目开发  供稿