2012-10-03 56 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; 
    }]; 
} 
相关问题