web-dev-qa-db-fra.com

Suppression d'image de UIImageView

Je charge un UIImageView avec une image en fonction de l'interaction de l'utilisateur. Lorsque la vue parent est initialement affichée, aucune image n'a été sélectionnée et la vue image est noire. Si l'utilisateur quitte cette vue et revient, l'image est toujours là. J'ai essayé

myImageView.image = nil;

en quittant la vue mais l'image reste. Comment puis-je supprimer l'image pour que le UIImageView apparaisse à nouveau en noir?

Le

UIImageView

est connecté via IB.

56
4thSpace

Définition de UIImageView comme:

myImageView.image = nil 

est la bonne façon d'effacer un UIImageView. Chargez-vous l'image lorsque votre fonction d'appel revient? Votre UIImageView est-il déclaré et/ou utilisé ailleurs dans votre fonction principale?

134
Tammen Bruccoleri

Essayez d'indiquer [self.imageView setNeedsDisplay]; après que le réglage de votre image soit nul. Cela déclenchera, je crois, un redessin de cet élément lors du prochain cycle de boucle d'exécution. Aka vous marquez cette vue comme "sale" et avez besoin d'une refonte.

4
theprojectabot

J'ai eu un problème similaire avec UIImageView sur mon UIButton, où j'avais défini l'image en utilisant

[button setImage:image forState:UIControlStateNormal];

Si vous le définissez sur zéro, l'image sera supprimée, mais le fait d'appeler à nouveau le getter réinitialisera l'image. Je l'ai corrigé avec:

[button setImage:nil forState:UIControlStateNormal];

au lieu de

[button.imageView.image = nil];
3
MaxGabriel

Vous pouvez utiliser un UITapGestureRecognizer pour supprimer l'image pour un nombre donné de clics.

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onImageTapped:)];

tapGesture.delegate = self;

tapGesture.numberOfTapsRequired = 2; // no. of taps (clicks) on which you want to remove the image

[myImageView addGestureRecognizer:tapGesture];

et donnez la définition de la méthode:

- (void)onImageTapped:(UITapGestureRecognizer*)recognizer
{

    UIImageView *imgView = (UIImageView*) recognizer.view;
    [imgView removeFromSuperview];
}
2
Mohd Rahib

J'ai également eu le même problème, peu importe que j'utilise myImageView.image = nil ou [myImageView setImage:nil] l'image s'affiche toujours sur le UIImageView; en supposant que l'un ou l'autre devrait fonctionner. Il m'a fallu plusieurs heures pour déboguer et découvrir où ont des problèmes. Enfin, je l'ai fait en utilisant le code suivant,

        [UIView beginAnimations:nil context:nil];
        [UIView animateWithDuration:1 animations:nil];
        myImageView.image = nil;
        [UIView commitAnimations];

Je ne sais pas pourquoi, mais lorsque je travaille en tant qu'animation, l'image peut être parfaitement claire.

2
TonyNet