Xcode Удаление некоторых представлений из представления

Приветствуем всех,

Я ноб, и я пытался проработать это через несколько дней.

Я добавляю изображения к просмотру через UItouch. В представлении содержится фон, поверх которого добавляются новые изображения. Как очистить изображения, которые я добавляю из подвью, не избавляясь от UIImage, который является фоном. Любая помощь очень ценится. Спасибо в Advance.

вот код:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event { 
NSUInteger numTaps = [[touches anyObject] tapCount];

if (numTaps==2) {
    imageCounter.text [email protected]"two taps registered";      

//__ remove images  
    UIView* subview;
    while ((subview = [[self.view subviews] lastObject]) != nil)
        [subview removeFromSuperview];

    return;

}else {

    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];
    CGRect myImageRect = CGRectMake((touchPoint.x -40), (touchPoint.y -45), 80.0f, 90.0f); 
    UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];

    [myImage setImage:[UIImage imageNamed:@"pg6_dog_button.png"]];
     myImage.opaque = YES; // explicitly opaque for performance


    [self.view addSubview:myImage];
    [myImage release];

    [imagesArray addObject:myImage];

    NSNumber *arrayCount =[self.view.subviews count];
    viewArrayCount.text =[NSString stringWithFormat:@"%d",arrayCount];
    imageCount=imageCount++;
    imageCounter.text =[NSString stringWithFormat:@"%d",imageCount];

}

}

Ответ 1

Что вам нужно - это способ выделения добавленных объектов UIImageView из фона UIImageView. Я могу придумать два способа сделать это.

Подход 1: Назначить добавленным UIImageView объектам специальное значение тега

Каждый объект UIView имеет свойство tag, которое представляет собой просто целочисленное значение, которое можно использовать для идентификации этого представления. Вы можете установить значение тега для каждого добавленного вида в 7 следующим образом:

myImage.tag = 7;

Затем, чтобы удалить добавленные виды, вы можете пройти через все подзоны и удалить только те, у которых значение тега равно 7:

for (UIView *subview in [self.view subviews]) {
    if (subview.tag == 7) {
        [subview removeFromSuperview];
    }
}

Подход 2. Помните фоновый вид

Другой подход - сохранить ссылку на фоновый вид, чтобы вы могли отличить его от добавленных представлений. Сделайте IBOutlet для фона UIImageView и назначьте его обычным способом в Interface Builder. Затем, прежде чем удалять subview, просто убедитесь, что это не представление фона.

for (UIView *subview in [self.view subviews]) {
    if (subview != self.backgroundImageView) {
        [subview removeFromSuperview];
    }
}

Ответ 2

Более быстрый код для подхода № 1 только в одной функциональной строке кода:

self.view.subviews.filter({$0.tag == 7}).forEach({$0.removeFromSuperview()})