2010-11-09 3 views
11

Привет всем,Xcode Удаление Некоторые подвиды с точки зрения

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

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

вот код:

- (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]; 

} 

}

ответ

28

Что вам нужно, это способ различения добавленных 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 в общем, правильно, но обратите внимание, что вы можете ограничить поиск, используя [UIView viewWithTag: 7] и не нужно перебирать каждую точку зрения. Конечно, это может ничего не сэкономить, но это хорошая вещь, чтобы знать – justin

+0

Ребята благодарим так много за ваш вклад. Я попробую их сегодня. Я проделал долгую работу, которая должна была добавить задний фон после того, как все было очищено. Не совсем элегантный, но он сработал. –

+1

Ваш обход очень умный, хотя он может не работать так хорошо, когда вам нужно больше контролировать свои взгляды. Если вы попытаетесь использовать 'viewWithTag:', как было предложено @justin, имейте в виду, что он вернет только первое представление, найденное с соответствующим тегом. Это очень удобный метод, когда есть только один такой вид. Если у вас много просмотров с совпадающими тегами, вы закончите итерацию, чтобы найти их все. Дополнительный совет: у просмотров есть значение тега по умолчанию, равное нулю, поэтому избегайте использования нуля в качестве идентификационного значения тега. –

0

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

self.view.subviews.filter({$0.tag == 7}).forEach({$0.removeFromSuperview()}) 
Смежные вопросы