1

我有一个项目,我将选定的图像添加到 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];
}
4

1 回答 1

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;
    }];
}
于 2012-10-03T00:36:17.933 回答