iOS UIImage.drawInRect (CGContextDrawImage) performance



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

操纵意味着平移、调整大小、旋转。

我用drawInRect来绘制我所有的物品。不幸的是,在绘制图像时,我看到性能非常差 - 这是使用探查器检查代码后的结论。

从我在网上读到的内容来看,人们建议使用单独的UIView(UIImageView(进行所有图像绘制,并在单独的视图中对其他内容使用正常drawInRect

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

  • 背面有 2 层,带有文字
  • 1 层带图像 - 遮挡部分文本
  • 前面有 2 层,图像顶部有文字

这意味着我必须为前 2 个文本图层制作一个UIView,为中间图像创建一个UIImageView,为前面的项目制作另一个UIView。这似乎不合理。

如何提高图像绘制的性能?

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

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

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

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
}
}
}

最新更新