2012-10-03 55 views
1

我有一個項目,我將選定的圖像添加到UIView。一旦我添加圖像,我可以移動,旋轉和縮放圖像。但是讓我們說,我選擇了錯誤的圖像,我想撤消。什麼是適當的方法來處理這樣的事情?另外,假設我添加了多個,但想從視圖中清除所有這些,那麼適當的方法是什麼?如何撤消和/或清除添加的UIImageView到我的UIView?

以下是我迄今爲止嘗試:

-(IBAction)undoButtonTapped 
{ 
    self.stampedImageView.image = nil; 
} 

這將成功地撤銷之前的操作,但僅此而已。比方說,我添加兩個或更多的圖像。也許我想撤消一個或多個動作,但不是全部。這隻會撤銷最近的操作。

例子:

User adds three stamps 
To undo 2 stamps: tap the undo button twice 
To delete all stamps: tap the delete button once 

我已經找到了如何刪除所有郵票一鍵式水龍頭。見下文。

刪除代碼:

UIView * subview; 
while ((subview = [[imageView subviews] lastObject]) != nil) 
{ 
    [subview removeFromSuperview]; 
} 
+0

讓我試試看。首先,你打算如何撤消一項或多項行動?當用戶點擊UNDO按鈕時,您會提示並詢問他們希望撤消多少UNDO?另外,爲什麼不使用removeFromSuperview方法? –

回答

0

您可以通過視圖的子視圖循環,測試特定子視圖是否是一個圖像視圖,然後調用removeFromSuperview上,只要你想盡可能多的。子視圖中的視圖與添加視圖的順序相同,因此要刪除最後的n個項目,您需要從末尾枚舉圖像視圖數組。舉例來說,這種方法會刪除最後添加的3個圖像視圖:

-(IBAction)deleteThree:(id)sender { 
    NSIndexSet *indxs = [self.view.subviews indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
     return [obj isKindOfClass:[UIImageView class]]; 
    }]; 

    __block int i = 0; 
    [indxs enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger idx, BOOL *stop) { 
     [[self.view.subviews objectAtIndex:idx] removeFromSuperview]; 
     i++; 
     if (i==3) 
      *stop = YES; 
    }]; 
} 
相關問題