4

cgcontext を使用して、ユーザーがタッチ イベントを使用して描画する UIImageView に描画するアプリがあり、ユーザーが作成した描画を元に戻したいと考えています。

編集:


touchesBegan を使用して、タッチの開始時に UIImage を保存しようとしています。NSUndoManager


そして、UIAlertView を使用して元に戻すにはどうすればよいですか。
つまり、UIAlertView から元に戻すメソッドを呼び出してから、やり直すメソッドを呼び出したいのですが、これを達成する方法がわかりません。
助けてください

4

1 に答える 1

3

私は iPhone 用のグラフィックス ソフトウェア ( http://www.layersforiphone.com/ ) を作成しており、これを理解するためにしばらく時間を費やしました。問題は、CGContext が本質的に「元に戻す」ことができないことです。四角形を塗りつぶしたり、描画した部分を元に戻したりすることはできません。データがそこにないだけです。私の経験では、描画操作が実行される前に、変更されている領域を調べ、その領域の画像データを元に戻すスタックに保存する「保存」メソッドを作成するのが最善の策です。その後、元に戻す場合は、変更された領域を取得して、保存したデータから復元できます。

基本的に CGImageRefs と CGRects のスタックが必要であり、NSUndoManager に適切にマップされないため、レイヤーの NSUndoManager とは別にそのアプローチを実装することにしました。

注: 技術的には、画像が変更されるたびに画像全体のコピーを保存することができます。ただし、これはメモリの不適切な使用です。小さな領域しか変更できないためです。寛大な元に戻す履歴 (10 ステップ以上) が必要な場合は、描画スペース内の小さなサブイメージを保存して復元することをお勧めします。

それが役立つことを願っています! これが優れたソリューションではないことは承知しています。組み込み API では、実際には多くのことができません。この問題に対する一般的な解決策を作成する場合、多くの人がそれに興味を持つと思います!

于 2009-12-31T05:59:08.377 に答える