2010-01-02 20 views
46

Cargo un UIImageView con una imagen que depende de la interacción del usuario. Cuando se visualiza inicialmente la vista principal, no se ha seleccionado ninguna imagen y la vista de la imagen es negra. Si el usuario abandona esa vista y regresa, la imagen aún está allí. He intentadoExtracción de imagen de UIImageView

myImageView.image = nil; 

al salir de la vista pero la imagen permanece. ¿Cómo puedo eliminar la imagen para que el UIImageView aparezca en negro otra vez?

El

UIImageView

está conectado a través de IB.

Respuesta

110

Ajuste del UIImageView como:

myImageView.image = nil 

es la forma correcta de limpiar una UIImageView. ¿Está cargando la imagen cuando vuelve la función de llamada? ¿Se ha declarado su UIImageView y/o se ha utilizado en otro lugar de su función principal?

+0

Por alguna razón, está funcionando ahora. No sé que hice algo diferente. Gracias. – 4thSpace

+0

De acuerdo; así es como limpias la imagen. La causa más probable es que la asignación nula no se llame en realidad. –

2

También tengo el mismo problema, no importa que yo use myImageView.image = nil o [myImageView setImage:nil] la imagen todavía se muestra en el UIImageView; asumiendo que cualquiera debería funcionar. Me costó muchas horas depurarme y averiguar dónde tengo un problema. Por último, lo hice usando el siguiente código,

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

No sé por qué, pero cuando trabajo como una animación a continuación, la imagen puede ser perfectamente clara.

3

He tenido un problema similar con el UIImageView en mi UIButton, donde había fijado la imagen utilizando

[button setImage:image forState:UIControlStateNormal]; 

Si se establece a cero eliminaría la imagen, pero llamando al captador de nuevo restablecer la imagen. Lo arreglé con:

[button setImage:nil forState:UIControlStateNormal]; 

en lugar de

[button.imageView.image = nil]; 
2

Puede utilizar un UITapGestureRecognizer quitar la imagen de un determinado número 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]; 

y dar la definición del método:

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

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

Trate indicando [self.imageView setNeedsDisplay]; después de que su imagen Configuración a nulas. Esto disparará un redibujado de ese elemento en el siguiente ciclo de runloops, creo. Aka, está marcando esta vista como "sucia" y necesita un redibujado.

+0

No estoy recibiendo suficientes en este caso porque creo que es el correcto en este caso. –

+0

Después de establecer nil a la imagen, a veces ImageView aún almacena en caché la imagen y no reDraw, así que aquí está la mejor solución ahora. Gracias –

Cuestiones relacionadas