2

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

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

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

根据我在网上阅读的内容,人们建议对所有图像绘制使用单独的UIView( ),对单独视图中的其他内容使用法线。UIImageViewdrawInRect

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

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

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

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

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

注意:我提到层我不是指CALayer.

4

1 回答 1

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

           }

         }

        }
于 2018-05-02T19:36:27.173 回答