Salutations à tous,
Je suis un noob et j'essaie de résoudre ce problème depuis quelques jours.
J'ajoute des images à une vue via UItouch. La vue contient un arrière-plan au-dessus duquel les nouvelles images sont ajoutées. Comment effacer les images que j'ajoute à partir de la sous-vue, sans me débarrasser de l'UIImage qui constitue l'arrière-plan. Toute aide est grandement appréciée. Merci d'avance.
voici le code:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event {
NSUInteger numTaps = [[touches anyObject] tapCount];
if (numTaps==2) {
imageCounter.text =@"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];
}
}
Ce dont vous avez besoin, c'est d'un moyen de distinguer les objets UIImageView
ajoutés de l'arrière-plan UIImageView
. Je peux penser à cela de deux manières.
Approche 1: attribuer une valeur de balise spéciale aux objets UIImageView
ajoutés
Chaque objet UIView
a une propriété tag
qui est simplement une valeur entière pouvant être utilisée pour identifier cette vue. Vous pouvez définir la valeur de balise de chaque vue ajoutée sur 7 comme suit:
myImage.tag = 7;
Ensuite, pour supprimer les vues ajoutées, vous pouvez parcourir toutes les sous-vues et ne supprimer que celles avec une valeur de balise de 7:
for (UIView *subview in [self.view subviews]) {
if (subview.tag == 7) {
[subview removeFromSuperview];
}
}
Approche 2: Mémoriser la vue d'arrière-plan
Une autre approche consiste à conserver une référence à la vue d'arrière-plan afin de pouvoir la distinguer des vues ajoutées. Créez une IBOutlet
pour la UIImageView
d'arrière-plan et affectez-la comme d'habitude dans Interface Builder. Ensuite, avant de supprimer une sous-vue, assurez-vous que ce n'est pas la vue en arrière-plan.
for (UIView *subview in [self.view subviews]) {
if (subview != self.backgroundImageView) {
[subview removeFromSuperview];
}
}
Un code plus rapide pour l'approche n ° 1 dans une seule ligne de code fonctionnelle:
self.view.subviews.filter({$0.tag == 7}).forEach({$0.removeFromSuperview()})