gpt4 book ai didi

iOS UIImage.drawInRect(CGContextDrawImage) 性能

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:37 25 4
gpt4 key购买 nike

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

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

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

根据我在网上阅读的内容,人们建议使用单独的 UIView (UIImageView) 来绘制所有图像,而使用普通的 drawInRect其他内容在单独的 View 中。

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

  • 背面有 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

}

}

}

关于iOS UIImage.drawInRect(CGContextDrawImage) 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50142046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com