如何撤消和/或清除添加到 UIView 的 UIImageView?
Posted
技术标签:
【中文标题】如何撤消和/或清除添加到 UIView 的 UIImageView?【英文标题】:How do I undo and/or clear an added UIImageView to my UIView? 【发布时间】:2012-10-03 00:01:21 【问题描述】:我有一个项目,我将选定的图像添加到 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];
【问题讨论】:
让我试着理解。首先,您打算如何撤消一个或多个操作?当用户点击 UNDO 按钮时,您是否会提示并询问他们希望撤消多少个 UNDO?另外,为什么不使用 removeFromSuperview 方法呢? 【参考方案1】:您可以遍历视图的子视图,测试特定子视图是否为图像视图,然后根据需要调用 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;
];
【讨论】:
以上是关于如何撤消和/或清除添加到 UIView 的 UIImageView?的主要内容,如果未能解决你的问题,请参考以下文章