2012-03-02 57 views

回答

0

首先,請註明你用什麼畫。你是否使用任何API或核心圖形框架進行繪圖。

以下是我找到的鏈接中的一些方法。

方法:

  1. 上touchesEnded,保存圖片到應用程序沙箱像一個名字.. 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

不準確,最後一筆可以覆蓋其他筆畫,因此用同樣的背景顏色繪製相同的路徑也會擦除較舊的路徑,這是不可接受的,再加上它不考慮stoke屬性(如寬度或結尾帽) – dvhh 2012-03-02 04:46:02

+0

任何原因爲downvoting ?. – Vignesh 2012-03-02 04:46:30

+0

Ofcourse您將不得不使用相同的屬性來重繪它。用混合模式更新答案。 – Vignesh 2012-03-02 04:48:26

0

這取決於很多事情,你必須要更具體的瞭解您所使用的繪圖方法,例如,如果你是在談論「鉛筆」筆觸和繪圖方法使用石英只是畫點什麼,而且你只對最後的筆劃或改變感興趣,你可以隨時保存當前的圖形上下文(圖像上下文或其他),並在出現撤消的情況下顯示。如果你想允許多個筆畫被撤消,你將不得不將它們添加到一個數組中,以便重新繪製到撤消。如果你使用開放式的話,那麼它也是不同的。

1
-(void)undoButtonClicked 
{ 

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

} 
+0

它的工作?或任何更多的東西 – 2012-03-02 04:57:25

+0

當我不使用UIBezierPath呢? 我使用這個呢? [curImage drawAtPoint:CGPointMake(0,0)]; CGPoint mid1 = midPoint(previousPoint1,previousPoint2); CGPoint mid2 = midPoint(currentPoint,previousPoint1); context = UIGraphicsGetCurrentContext(); [self.layer renderInContext:context]; – Mashhadi 2012-04-06 11:29:45

0

非iPhone特定

像素的畫布:

你的選擇是要麼保持整個畫布或得到由堆棧行程所覆蓋的區域的快照。 撤消操作會彈出您的撤消堆棧並重新繪製您堆疊的緩衝區。

不方便的是正確調整撤消限制以避免佔用內存。

矢量繪圖:

這是非常瑣碎....