0

移動したタッチから setNeedsDisplay を呼び出しています (また、移動したタッチからではなく、0.05 タイマーから呼び出しようとしました) と drawrect メソッドは常に遅延します。とにかくこれを変更しますか?drawrectで多くの描画を行っていますが、ラグを修正する解決策がわかりません。タイマーが 1.0 間隔で呼び出された場合でも、タイマーがセレクターを呼び出したときにまだ遅れていました。また、リークはありません(Xcodeの分析機能を使用して確認しました)。助けてください!!

編集:タイマー/メソッドから drawRect ではなく、setNeedsDisplay を呼び出しています

編集:コアグラフィックスが多くの描画で何かを行うと、常に遅れるようです。私はメモリリークがないことを確信しており、別のペイントアプリを作成したことさえありますが、遅れています(これに対する修正は何ですか??助けてください)

4

4 に答える 4

4

他の回答の1つに関するコメントのトランスクリプトをわずかに編集しました:

色相ベースのカラー ピッカーで色を描画しています (描画 rect では、各色相値の線が描画されます)

… 360 の長方形を描いていますか?

はい、そうです …。

1 つの UIImageView のイメージに、さまざまな色の 360 の長方形のイメージを描画します。長方形を解放するよりも。(四角形の割り当て/解放には for ループを使用します)

したがって、これを 360 回実行しています。

  1. イメージを作成します。
  2. この画像に長方形を描きます。(または、ステップ 1 でファイルからイメージをロードした場合)。
  3. そのイメージを別のイメージに描画します。
  4. 画像をリリースします。

そして、すべての小さな画像を描画した画像を、実際の表示のために UIImageView に渡しますか?

これを画像にキャッシュしようとしているように思えますが、これを正しく行えば、最初から役に立ちますが、最初から遅くする必要はありません。

既にカスタム ビューがあります。画像ビューをドロップし、この四角形描画 (または画像描画) コードをすべて切り取ります。個々の色付きの四角形を含む画像ファイルがある場合は、それらを削除します。

ビューのdrawRect:、グラデーションを作成し、それを描画します。あなたdrawRect:は3行の長さになり、はるかに速くなるはずです。

于 2011-10-03T02:21:39.907 に答える
2

drawRect明示的に呼び出すことは絶対にしないでください。代わりに使用setNeedsDisplayすると、システムの準備が整ったときに描画が実行されます。

編集:あなたがすでにこれを行っていたという事実に基づいています。あなたの問題は、 drawRect が遅すぎることです。何を描こうとしていますか?

于 2011-10-02T14:48:31.623 に答える
2

移動したタッチから drawrect を呼び出しています

それをしないでください。

(また、移動したタッチからではなく、0.05 タイマーから呼び出すことも試みました)

それをしないでください。

drawrect メソッドは常に遅延します。とにかくこれを変更しますか?drawrectで多くの描画を行っていますが、ラグを修正する解決策がわかりません。タイマーが 1.0 間隔で呼び出された場合でも、タイマーがセレクターを呼び出したときにまだ遅れていました。また、リークはありません(Xcodeの分析機能を使用して確認しました)。助けてください!!

はい!

于 2011-10-02T14:50:33.623 に答える
0

画面のどの部分を変更する必要があるかがsetNeedsDisplayInRectわかれば、画面全体ではなく、変更された四角形を再描画するだけで、呼び出しを高速化できます。

バックグラウンド スレッドを実行してバッファ内にフレームを準備し、それを使用して画面に描画することもできます。それはあなたがしている絵の種類によって異なります。これは、このトピックで見つけたブログ投稿です。

または、OpenGL ESを使用して描画することもできます。

于 2011-10-02T15:11:33.880 に答える