2012-03-02 2 views
-6

私はUNDO機能を実装したいと思う描画アプリケーションを持っています。そのため、ユーザーは最後に行われた描画ストロークを元に戻すことができます。iPhone SDKを描画するときに「元に戻す」方法は?

どうすればいいですか教えてください。

おかげ

+3

詳細を追加してください。 – Pochi

答えて

0

まず何を描くのに使うのですか明記してください。描画に任意のAPIまたはCore-Graphics Frameworkを使用していますか?

ここに私が見つけたリンクからのアプローチのいくつかがあります。

アプローチ:touchesEnded上

  1. 、その変数を「元に戻す」で、カウントを置く。.. 1.png、2.pngなどのような名前を持つアプリのサンドボックスに画像を保存します。ユーザーがアンドゥを押すと、カウントに古いイメージベースがロードされます。 (これは私が大雑把に考えていることですが、まだコーディングを行っていないが、コーディングするのは非常に簡単です)。

  2. NSUndoManager。

これは、これを行うために探している他の人に役立ちます。

参考リンク:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/46996-drawing-app-how-do-undo.html

乾杯

-1

私の簡単な解決策は、 1店CGPathにあります。 2.クリアブレンドモードを使用して、パスを描画してクリアすることができます。

CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeClear); 
+3

が不正確な場合、最後のストロークは他のストロークをカバーすることができるので、同じパスを背景色で塗りつぶすと、古いパスも消去されますが、ストロークアトリビュート(幅や終わりのキャップなど)を考慮に入れません – dvhh

+0

何らかの理由downvotingの? – Vignesh

+0

もちろん、同じ属性を使用して再描画する必要があります。回答はブレンドモードで更新されました。 – Vignesh

0

それだけで何かを描画するために水晶を使用して、あなたが「鉛筆」のストロークと、あなたの描画方法について話している場合は、たとえば、あなたが使用している方法を描くかについて、より具体的にする必要があり、物事の多くに依存し、最後のストロークまたは変更にのみ関心がある場合は、現在のグラフィックスコンテキスト(イメージコンテキストなど)を保存して、元に戻す場合に表示することができます。いくつかのストロークを元に戻したい場合は、それらを配列に追加して元に戻すことができます。あなたが開いているglを使用している場合は、そのも異なる。

1
-(void)undoButtonClicked 
{ 

    if([pathArray count]>0){ 
     UIBezierPath *_path=[pathArray lastObject]; 
     [pathArray removeLastObject]; 
     [bufferArray addObject:_path]; 
     [self setNeedsDisplay]; 
    } 

} 
+0

その作業ですか?私がUIBezierPathを使用していないときは、 –

+0

以上のものがありますか? これを使用していますか? [curImage drawAtPoint:CGPointMake(0、0)]; CGPoint mid1 = midPoint(previousPoint1、previousPoint2); CGPoint mid2 = midPoint(currentPoint、previousPoint1); context = UIGraphicsGetCurrentContext(); [self.layer renderInContext:context]; – Mashhadi

0

NON iPhone特定

ピクセルのキャンバス:

あなたのオプションは、全体のキャンバスまたはスタック内のストロークでカバーされてしまった領域のいずれかのスナップショットを維持するだろう。 元に戻す操作で元に戻すスタックがポップされ、スタックしたバッファが再描画されます。

メモリを浪費するのを避けるため、元に戻す制限のサイズを適切に設定するのは不便です。

ベクトル描画:

それはかなり簡単です....

関連する問題