我根据有多少用户像这样点击屏幕多次创建了 UIImageView
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self.imageView];
fadeSpotRect = CGRectMake(touchPoint.x-20, touchPoint.y-20, 40, 40);
UIImageView *fadeSpotImageView = [[UIImageView alloc] initWithFrame:fadeSpotRect];
UIImage *fadeImage = [[UIImage alloc] init];
fadeImage = [filter smoothenPores:[self croppIngimageByImageName:faceImage toRect:CGRectMake(touchPoint.x-20, touchPoint.y-20, 40, 40)] intensity:10];
fadeImage = [self maskImage:fadeImage withMask:[UIImage imageNamed:@"fadeMask.png"]];
fadeSpotImageView.image = fadeImage;
[self.imageView addSubview:fadeSpotImageView];
}
现在,如果我调用 [fadeSpotImageView removeFromSuperview],它只会删除我创建的最后一个 UIImageView。我想删除我创建的所有 UIImageView
。我怎样才能做到这一点?
最佳答案
几个选项 - 我更喜欢选项 1,因为它是最明确、最干净且非常重要的文档本身。
1: 为 NSMutableArray 声明一个属性,并使用其余的初始化代码分配和初始化它。然后,每当您创建一个新的 UIImageView 时,将其添加到您的数组中,例如
self.imageViews addObject: fadeSpotImageView];
然后,当您准备好删除所有这些时,遍历数组并将它们全部删除,然后清除数组
[self.imageView enumerateObjectsUsingBlock:^(UIImageView *view, NSUInteger idx, BOOL *stop) {
[view removeFromSuperview];
}];
[self.imageViews removeAllObjects];
2:您可以盲目地删除所有 UIImageView 的 subview 。这很简单,但您必须确保没有删除您实际想要保留的 View 。
[self.view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UIImageView class]])
{
[obj removeFromSuperview];
}
}];
3:作为选项 2 的扩展,您可以在创建所有 imageView 时对其进行标记,然后将其用作循环中的条件检查。这样做的缺点是,现在您需要跟踪分配给 View 的标签,并确保它不会与其他内容发生冲突(这种情况不太可能发生,但有可能发生)。
//put in your touchesBegan method
fadeSpotImageView.tag = 100 //arbitrary number chosen to id the imageview
//then put this as your condition
if (obj.tag == 100)
{
[obj removeFromSuperview];
}
关于ios - 删除多个同名的 UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728792/