2010-01-02 20 views
46

Carico un UIImageView con un'immagine in base all'interazione dell'utente. Quando viene visualizzata inizialmente la vista genitore, non è stata selezionata alcuna immagine e la visualizzazione di immagini è nera. Se l'utente lascia quella vista e torna indietro, l'immagine è ancora lì. Ho provatoRimozione immagine da UIImageView

myImageView.image = nil; 

lasciando la vista ma l'immagine rimane. Come posso rimuovere l'immagine in modo che lo UIImageView appaia di nuovo nero?

Il

UIImageView

è collegato attraverso IB.

risposta

110

Impostazione UIImageView come:

myImageView.image = nil 

è il modo corretto per cancellare un UIImageView. Stai caricando l'immagine quando ritorna la tua funzione di chiamata? Il tuo UIImageView viene dichiarato e/o utilizzato altrove nella tua funzione principale?

+0

Per qualche motivo, sta funzionando ora. Non so che ho fatto qualcosa di diverso. Grazie. – 4thSpace

+0

concordato; questo è come si cancella l'immagine. La causa più probabile è che l'assegnazione nil non viene effettivamente chiamata. –

2

Ho anche avuto lo stesso problema, non importa io uso myImageView.image = nil o [myImageView setImage:nil] l'immagine continua a mostrare sul UIImageView; supponendo che uno dovrebbe funzionare. Mi spendono molte ore per eseguire il debug e scoprire dove sono i problemi. Infine, ho fatto utilizzando il seguente codice,

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

Non so perché, ma quando lavoro come un'animazione allora l'immagine può essere chiara perfettamente.

3

Ho avuto un problema simile con l'UIImageView sul mio UIButton, dove avevo impostare l'immagine utilizzando

[button setImage:image forState:UIControlStateNormal]; 

Impostando a zero sarebbe rimuovere l'immagine, ma chiamando il getter di nuovo azzerato l'immagine. Ho fissato con:

[button setImage:nil forState:UIControlStateNormal]; 

invece di

[button.imageView.image = nil]; 
2

È possibile utilizzare un UITapGestureRecognizer per rimuovere l'immagine per un determinato numero di clic.

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

e dare la definizione della modalità:

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

    UIImageView *imgView = (UIImageView*) recognizer.view; 
    [imgView removeFromSuperview]; 
} 
4

Prova affermando [self.imageView setNeedsDisplay]; dopo la vostra immagine Regolazione a zero. Questo attiverà un ridisegno di quell'elemento nel prossimo ciclo di runloop, credo. Aka stai contrassegnando questa vista come "sporca" e necessita di un ridisegno.

+0

Non sto facendo abbastanza su questo perché penso che sia quello giusto in questo caso. –

+0

Dopo aver impostato nil per l'immagine, a volte ImageView è ancora presente nella cache e non in reDraw, quindi ecco la soluzione migliore ora. Grazie –