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 に答える