我有一个应用程序,可以让用户操作文本,图像,形状(矢量图像(等项目。它们堆叠在一起,就像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
}
}
}