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()})