2012-04-23 129 views
1

我想使用NSUndoManager撤銷並重做繪圖應用程序中的描邊和更改。 我使用UIGraphicsGetImagefromCurrentImageContext()將圖像存儲到可變數組中。重置撤銷/重做陣列iOS

我下面的代碼給出了一個想法:

- (void) performUndoRedo:(BOOL) undo 
{ 
    if (undo) 
    { 
     [undoManager undo]; 
    } 
    else 
    { 
     [undoManager redo]; 
    } 

    NSLog(@"layerArray:%@", layerArray); 

    [self drawImage:[layerArray lastObject]]; 
} 

- (void) redo:(id) object 
{ 
    [layerArray addObject:object]; 
    [[undoManager prepareWithInvocationTarget:self] undo:object]; 
    [undoManager setActionName:@"drawredo"]; 
    // NSLog(@"layerArray IN REDO:%@", layerArray); 
} 

- (void) undo:(id) object 
{ 
    [[undoManager prepareWithInvocationTarget:self] redo:object]; 
    [undoManager setActionName:@"drawundo"]; 
    [layerArray removeObject:object]; 
    // NSLog(@"layerArray IN UNDO:%@", layerArray); 
} 

- (void) touchesEnded:(NSSet *) touches withEvent:(UIEvent *) event 
{ 
    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); 

    [layerArray addObject:layerImage]; 
    [self undo:layerImage]; 
    UIGraphicsEndImageContext(); 

    NSLog(@"%@", layerArray); 
} 

如何以及在什麼點動作可以清除layerArray,並重置撤消堆棧?在此先感謝

+0

是否在撤銷重做操作 – Ranjit 2012-07-10 14:28:17

+0

難道ü找到任何解決辦法爲這個成功。我也面臨同樣的問題。如果有人對此有所瞭解,這對我會有所幫助。 – Madhavan 2018-01-10 13:00:17

回答

2

好像你可以使用每個這些類的方法來清除:

+0

我的問題是什麼時候應該重置NSUndoManager和NSMutableArray? – 2012-04-23 05:10:07

+0

嗯,這不是你的問題如何讀取:第一行是「我想重置」,而不是「我應該什麼時候重置」。我不清楚實際的問題是:你的撤消堆棧在那裏有不需要的動作嗎?換句話說:你爲什麼要重置它? – ckhan 2012-04-23 05:39:38

+0

當我登錄時,layerArray不斷增長。當另一組操作替換撤消堆棧中的前一個操作時,我需要一種清除該數組的方法。 – 2012-04-23 06:22:57

0

以下參考使用..

Undo redo in paint app

希望,這將幫助你

+0

沒有源代碼可用:( – 2012-04-23 05:12:21

+0

檢查我的編輯和.. :) – Nit 2012-04-23 06:06:10

+0

嗯,謝謝你,但這是沒有NSUndoManager ... +1 :) – 2012-04-23 06:12:33