我有一个应用程序,让用户可以操作文本,图像,形状(矢量图像)等项目。它们堆叠在彼此之上,就像Photoshop中的图层一样。
操纵翻译,调整大小,旋转的方法。
我使用drawInRect
来绘制我的所有项目。不幸的是,在绘制图像时,我发现性能非常差 - 这是在使用分析器检查代码后的结论。
根据我在网上看到的内容,人们建议在单独的视图中为所有图像绘制使用单独的UIView
(UIImageView
),对其他内容使用普通drawInRect
。< / p>
但这种方法会有问题,因为我可能会遇到这样的情况:
这意味着我必须为前2个文本图层设置UIView
,为中间图像设置UIImageView
,为前端项设置另一个UIView
。这似乎是不合理的。
如何改善图像绘制的效果?
另外,请记住,我需要将整个内容导出到特定的最终图像大小。
注意:我提到的图层我不是指CALayer
。
答案 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
}
}
}