ios - 删除多个同名的 UIImageView

标签 ios objective-c uiimageview

我根据有多少用户像这样点击屏幕多次创建了 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/

相关文章:

ios - 有没有办法在 Swift 中只为特定的 UITableViewCell 实现 editActionsForRowAtIndexPath?

ios - 在 Master/Detail 应用程序中使用 removeObserver 的正确方法

ios - 使用 ReactiveCocoa 禁用 UIBarButtonItem

ios - 将图像传递给另一个 View Controller (Swift)

iphone - iOS - 是否应该更改 UIImageView 的框架来调整其图像大小?

通过 testflight 与 COSMCtrl _foregroundAppActivity 共享时,iOSApp 崩溃传入包提供的 UUID 为零,在设备日志中发现现有错误

ios - AVCaptureSession 和背景音频 iOS 7

iphone - 如何检测 UIScrollview 中 UIImageView 的触摸?

ios - 在 iPad 或 iPhone 上无需 UI 发送电子邮件的替代方法

c++ - Objective-c中的class + (void)method与c++中的scope operator::的比较