私は iPhone 用のグラフィックス ソフトウェア ( http://www.layersforiphone.com/ ) を作成しており、これを理解するためにしばらく時間を費やしました。問題は、CGContext が本質的に「元に戻す」ことができないことです。四角形を塗りつぶしたり、描画した部分を元に戻したりすることはできません。データがそこにないだけです。私の経験では、描画操作が実行される前に、変更されている領域を調べ、その領域の画像データを元に戻すスタックに保存する「保存」メソッドを作成するのが最善の策です。その後、元に戻す場合は、変更された領域を取得して、保存したデータから復元できます。
基本的に CGImageRefs と CGRects のスタックが必要であり、NSUndoManager に適切にマップされないため、レイヤーの NSUndoManager とは別にそのアプローチを実装することにしました。
注: 技術的には、画像が変更されるたびに画像全体のコピーを保存することができます。ただし、これはメモリの不適切な使用です。小さな領域しか変更できないためです。寛大な元に戻す履歴 (10 ステップ以上) が必要な場合は、描画スペース内の小さなサブイメージを保存して復元することをお勧めします。
それが役立つことを願っています! これが優れたソリューションではないことは承知しています。組み込み API では、実際には多くのことができません。この問題に対する一般的な解決策を作成する場合、多くの人がそれに興味を持つと思います!