¿Cómo puedo cambiar la imagen que se muestra en un UIImageView mediante programación?


134

Tengo un IBOutleta a UIImageView, pero cuando miro el UIImageViewdocumento, no puedo ver ninguna pista sobre cómo cambiarlo programáticamente. ¿Tengo que buscar un UIImageobjeto de eso UIImageView?

Respuestas:


185

Si ya tiene un IBOutlet para un UIImageView, todo lo que tiene que hacer es tomar una imagen y llamar a setImage en el receptor (UIImageView). A continuación se muestran dos ejemplos de capturar una imagen. Una de la Web y otra que agregue a su carpeta de Recursos en Xcode.

UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];

o

UIImage *image = [UIImage imageNamed: @"cell.png"];

Una vez que tenga una imagen, puede configurar UIImageView:

[imageView setImage:image];

La línea de arriba asume que imageView es su IBOutlet.

¡Eso es! Si quieres ponerte elegante, puedes agregar la imagen a una UIView y luego agregar transiciones.

Gestión de memoria PS no incluida.


1
gracias, pero no funciona :( eliminé la imagen en el generador de interfaces para que el UIImageView esté vacío. Luego implementé esto en el método viewDidLoad. Pero no sucede nada. El nombre de la imagen es 100% correcto especificado. También lo asigné con setImage . a la salida Algo más que pueda probar?
Gracias

3
Probablemente no haya conectado el IBOutlet a la referencia de ViewController en IB. Verifique que la imagen esté en la carpeta Recursos.
Jordania

No estoy seguro de las reglas necro / impacto en SO, pero sé que esto me ayudó a resolver mi problema. Estoy usando iOS v5.1, xcode 4.3.2
Jake

1
Compruebe si se llama a [UIViewController viewDidLoad] antes de cambiar la imagen. Estoy atrapado por eso. 8)
poGUIst

1
Agregando a esta solución, si está utilizando Image Asset Catalog, solo especifique el nombre de su conjunto de imágenes, por ejemplo, UIImage * image = [UIImage imageNamed: @ "My Icon"]; en lugar de UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS

37

Tenga en cuenta que el archivo NIB no conecta todos los IBOutlets hasta que la vista se haya agregado a la escena. Si está conectando las cosas manualmente (lo que podría estar haciendo si las cosas están en NIB separadas), es importante tener esto en cuenta.

Entonces, si mi controlador de vista de prueba tiene un "imageView" conectado por una punta, esto probablemente no funcionará:

  testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];
  [self.view addSubview:testCardViewController.view];

Pero esto:

  [self.view addSubview:testCardViewController.view];
  testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];

29

Esto funciono para mi

[ImageViewName setImage:[UIImage imageNamed: @"ImageName.png"]];

Asegúrese de que ImageView se declare correctamente en el archivo .h y esté vinculado con el elemento IB.



16

Para el propósito de las personas que pueden buscar en Google esto para tratar de resolver su problema, recuerde declarar adecuadamente la propiedad en su archivo de encabezado y sintetizar el UIImageView en su archivo de implementación ... Será difícil configurar la imagen mediante programación sin métodos getter y setter.

#import <UIKit/UIKit.h>

@interface YOURCONTROLLERNAME : UIViewController {
    IBOutlet UIImageView *imageToDisplay;
}

@property (nonatomic, retain) IBOutlet UIImageView *imageToDisplay;

@end

y luego en tu .m:

@implementation YOURCONTROLLERNAME

@synthesize imageToDisplay;
//etc, rest of code goes here

A partir de ahí, debería estar bien usando algo como lo siguiente para configurar su imagen.

[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];

¡Gracias! Al ser nuevo en xcode e iphones en general, me faltaba YOURCONTROLLER antes que imageToDisplay.
Opy

15

Ejemplo en Swift :

import UIKit

class ViewController: UIViewController {

    @IBOutlet var myUIImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func myAction(sender: UIButton) {
        let newImg: UIImage? = UIImage(named: "profile-picture-name")
        self.myUIImageView.image = newImg
    }

    @IBAction func myAction2(sender: UIButton) {
        self.myUIImageView.image = nil
        self.myUIImageView.image = UIImage(data: NSData(contentsOfURL: NSURL(string: "http://url/image.png")!)!)
    }

}

9

Siguiendo el consejo de Jordan (que debería funcionar en realidad), intente configurar el UIImageView para que sea visible:

 [imageView setHidden: NO];

y también, no te olvides de adjuntarlo a la UIView principal:

[mainView addSubview: imageView];

y traer al frente:

[mainView bringSubviewToFront: imageView];

Espero que combinar todos estos pasos te ayude a resolver el misterio.


8

Mi problema fue que intenté cambiar la imagen en otro hilo. Me gustó esto:

- (void)changeImage {
    backgroundImage.image = [UIImage imageNamed:@"img.png"];
}

Llamar con:

[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];

2
Sí, esto me mordió ... otra vez ... También se puede usardispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex

7

Si desea configurar la imagen mediante UIImageViewprogramación, no olvide agregar UIImageView como SubView a la Vista principal.

Y tampoco se olvidó de configurar ImageView Frame .

aquí está el código

UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];

myImage.image = [UIImage imageNamed:@"myImage.png"];

[self.view addSubview:myImage];

7

No olvide llamar sizeToFit()después de cambiar la imagen si luego usa el tamaño de UIImageView para configurar UIScrollView contentSize y / o calcular la escala del zoom

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size


2
UIColor * background = [[UIColor alloc] initWithPatternImage:
    [UIImage imageNamed:@"anImage.png"]];

self.view.backgroundColor = background;
[background release];

¿Es lo mismo presentar la imagen por el fondo de UIView o por la propiedad de imagen de UIImageView?
voromax

2

Esta pregunta ya tenía muchas respuestas. Lamentablemente, ninguno funcionó para mí. Entonces, en aras de completenes, agrego lo que me ayudó:

Tenía varias imágenes con el mismo nombre, así que las ordené en subcarpetas. Y tenía la ruta completa al archivo de imagen que quería mostrar. Con una ruta completa imageNamed:(como se usa en todas las soluciones anteriores) no funcionó y fue el método incorrecto.

En cambio, ahora uso imageWithContentsOfFile:así:

self.myUIImage.image = [UIImage imageWithContentsOfFile:_currentWord.imageFileName];

No sé, si alguien lee tan lejos?

Si es así, este te ayudó: vota. ;-)


1

Trabajar con Swift 5 (XCode 10.3) es solo

yourImageView.image = UIImage(named: "nameOfTheImage")

0

Para configurar la imagen en su imageView use la siguiente línea de código,

self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];                         

copie la imagen en su proyecto y luego use el código anterior
Vaibhav Shiledar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.