iOS UIImage.drawInRect(CGContextDrawImage)性能

时间:2018-05-02 19:21:16

标签: ios performance uiimage drawrect drawinrect

我有一个应用程序,让用户可以操作文本,图像,形状(矢量图像)等项目。它们堆叠在彼此之上,就像Photoshop中的图层一样。

操纵翻译,调整大小,旋转的方法。

我使用drawInRect来绘制我的所有项目。不幸的是,在绘制图像时,我发现性能非常差 - 这是在使用分析器检查代码后的结论。

根据我在网上看到的内容,人们建议在单独的视图中为所有图像绘制使用单独的UIViewUIImageView),对其他内容使用普通drawInRect。< / p>

但这种方法会有问题,因为我可能会遇到这样的情况:

  • 背面有2层文字
  • 带有图像的1层 - 阻碍文本的一部分
  • 正面有2层,图像顶部有文字

这意味着我必须为前2个文本图层设置UIView,为中间图像设置UIImageView,为前端项设置另一个UIView。这似乎是不合理的。

如何改善图像绘制的效果?

另外,请记住,我需要将整个内容导出到特定的最终图像大小。

注意:我提到的图层我不是指CALayer

1 个答案:

答案 0 :(得分:1)

使用这样的方法绘制你想要的东西:

func drawSomeImage(completion: (UIImage) -> Void) {

        UIGraphicsBeginImageContextWithOptions(<#T##size: CGSize##CGSize#>, <#T##opaque: Bool##Bool#>, <#T##scale: CGFloat##CGFloat#>)

        //Your drawing...

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
       completion(image)
}

并在主线程的线程中执行上述行,如下所示:

 func myImage() {

        DispatchQueue.global().async {


          drawSomeImage { image in


            DispatchQueue.main.async {

               //use this image in your main thread like:
              //self.imageView.image = image

           }

         }

        }