1

シンプルなお絵かきアプリである練習用アプリを作成しています。ユーザーが画面に沿って指をドラッグすると、100px x 100px の正方形に色が付きます。

現在、ユーザーがタップする新しい色付きの UIView を作成することでこれを実現していますが、それは機能しています。しかし、少し時間が経つと、かなりの遅延が発生します。これは、メイン ビューのサブビューとして UIView が多すぎることが原因であると考えられます。

UIView の数に関係なく、指をドラッグして UIView を同様に作成する他の人は、どのようにしてラグをまったく減らすことができますか。また、おそらくこれは不可能な作業だと思います。私のような人が、画面に沿ってドラッグした指で、メイン ビューで上記のサイズの立方体に色を付けるにはどうすればよいでしょうか?

これは特定の質問のように思えるかもしれませんが、パフォーマンスを低下させるオプションが少ない非常に大量の UIView がある場合、ラグを減らす方法を他の人が理解するのに役立つと思います。

4

3 に答える 3

2

1 つのアプローチは、各正方形の UIView を維持するのではなく、各正方形を画像に描画してその画像を表示することです。

ただし、描画が十分に単純な場合は、OpenGL を使用してこれを行うことができます。これははるかに高速です。OpenGL でこれを行う方法を示すApple のGL ペイント サンプル コードを参照してください。

描画が OpenGL には複雑すぎる場合は、たとえば CGBitmapContext を作成し、ユーザーが指をドラッグしたときに各正方形をそのコンテキストに描画できます。そのビットマップに新しい正方形を描画するたびに、(CGBitmapConxtextCreateImage を介して) ビットマップを画像に変換し、その画像を UIImageView に表示できます。

于 2012-12-13T23:16:29.513 に答える
1

私の頭に浮かぶのは2つのことです:

1-Instrumentsツールを使用して、メモリリークが発生しているかどうかを確認します

2-ビューごとに画像を作成するのではなく、ビューに色を付けるだけの場合は、UIView の背景色プロパティを設定するか、drawRect メソッドをオーバーライドしてカスタム描画を行います。

于 2012-12-14T01:52:38.357 に答える
0

あなたが探しているのは、UIViewのdrawRect:メソッドだと思います。カスタムUIViewを作成し(おそらくすでにそれを持っています)、drawRectメソッドをオーバーライドして、そこで描画を行うことができます!図面を配列または別のコンテナに保存し、配列の内容が変更されるたびにsetNeedsDisplayメソッドを呼び出す必要があります。

于 2012-12-13T23:10:37.847 に答える