美文网首页
iOS离屏渲染

iOS离屏渲染

作者: OneAlon | 来源:发表于2017-06-14 17:50 被阅读30次

    本文只用来做笔记 ,对看过的一些文章做自己的实践

    基础内容

    • CALayer
    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边框起作用,如果Layercontents有内容的话,合成的时候圆角就会显示不出来,还需要做一个圆角出来,设置masksToBoundstrue

    只设置cornerRadius是不会触发离屏渲染的,只有当cornerRadius>0并且masksToBounds设置为true,并且设置了backgroundColor才会触发离屏渲染(这是自己得出的结论).

    圆角.png
    系统圆角.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

    参考文献

    离屏渲染优化详解:实例示范+性能测试
    绘制像素到屏幕上

    相关文章

      网友评论

          本文标题:iOS离屏渲染

          本文链接:https://www.haomeiwen.com/subject/osalqxtx.html