Comment puis-je changer l'image affichée dans une UIImageView par programmation?

134

J'ai un IBOutletto a UIImageView, mais quand je regarde le UIImageViewdocument, je ne vois aucun indice sur le changement par programme. Dois-je récupérer un UIImageobjet à partir de cela UIImageView?

Merci
la source

Réponses:

185

Si vous avez déjà un IBOutlet vers une UIImageView, il vous suffit de saisir une image et d'appeler setImage sur le récepteur (UIImageView). Deux exemples de capture d'une image sont ci-dessous. Un sur le Web et un que vous ajoutez à votre dossier Resources dans Xcode.

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

ou

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

Une fois que vous avez une image, vous pouvez définir UIImageView:

[imageView setImage:image];

La ligne ci-dessus suppose que imageView est votre IBOutlet.

C'est tout! Si vous voulez avoir de la fantaisie, vous pouvez ajouter l'image à un UIView, puis ajouter des transitions.

Gestion de la mémoire PS non incluse.

Jordan
la source
1
merci, mais cela ne fonctionne pas: (j'ai supprimé l'image dans le générateur d'interface afin que UIImageView soit vide. puis j'ai implémenté cela dans la méthode viewDidLoad. Mais rien ne se passe. Le nom de l'image est 100% correct spécifié. Je lui ai également attribué setImage au point de vente. Puis-je essayer autre chose?
Merci le
3
Vous n'avez probablement pas connecté l'IBOutlet à la référence ViewController dans IB. Vérifiez que l'image se trouve dans le dossier Resources.
Jordanie
Je ne suis pas sûr des règles / impact nécro sur le SO, mais je sais que cela m'a aidé à résoudre mon problème. J'utilise iOS v5.1, xcode 4.3.2
Jake
1
Vérifiez que [UIViewController viewDidLoad] est appelé avant de changer d'image. Je suis piégé par ça. 8)
poGUIst
1
En plus de cette solution, si vous utilisez Image Asset Catalog, spécifiez simplement le nom de votre jeu d'images, par exemple UIImage * image = [UIImage imageNamed: @ "My Icon"]; au lieu de UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS
37

Notez que le fichier NIB ne relie pas tous les IBOutlets tant que la vue n'a pas été ajoutée à la scène. Si vous câblez les choses manuellement (ce que vous pourriez faire si les choses sont dans des NIB séparés), il est important de garder à l'esprit.

Donc, si mon contrôleur de vue de test a un "imageView" câblé par une pointe, cela ne fonctionnera probablement pas:

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

Mais cela va:

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

Cela a fonctionné pour moi

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

Assurez-vous que ImageView est correctement déclaré dans le fichier .h et est lié à l'élément IB.

Gilall
la source
23
imageView.image = [UIImage imageNamed:@"myImage.png"];
Lukas Wiklund
la source
16

Dans le but de personnes qui recherchent cela sur Google pour essayer de résoudre leur problème, n'oubliez pas de déclarer correctement la propriété dans votre fichier d'en-tête et de synthétiser l'UIImageView dans votre fichier d'implémentation ... Il sera difficile de définir l'image par programme sans méthodes getter et setter.

#import <UIKit/UIKit.h>

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

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

@end

puis dans votre .m:

@implementation YOURCONTROLLERNAME

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

À partir de là, vous devriez utiliser quelque chose comme ce qui suit pour définir votre image.

[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];
Swiecki
la source
Merci! Étant nouveau sur xcode et iphones en général, il me manquait le YOURCONTROLLER avant l'imageToDisplay.
Opy
15

Exemple dans 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")!)!)
    }

}
Roi-sorcier
la source
9

En suivant les conseils de Jordan (qui devraient fonctionner en fait), essayez de définir UIImageView pour être visible:

 [imageView setHidden: NO];

et aussi - n'oubliez pas de le joindre à l'UIView principal:

[mainView addSubview: imageView];

et de mettre au premier plan:

[mainView bringSubviewToFront: imageView];

J'espère que la combinaison de toutes ces étapes vous aidera à résoudre le mystère.

Adi
la source
8

Mon problème était que j'ai essayé de changer l'image dans un autre fil. J'ai aimé ceci:

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

Appeler avec:

[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
Okku
la source
2
Ouais, ça m'a mordu ... encore une fois ... Peut aussi utiliserdispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex
7

Si vous souhaitez définir l'image sur par UIImageViewprogramme, n'oubliez pas d'ajouter en UIImageView tant que sous- vue à la vue principale.

Et n'oubliez pas non plus de définir ImageView Frame .

voici le code

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

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

[self.view addSubview:myImage];
Rajneesh071
la source
7

N'oubliez pas d'appeler sizeToFit()après avoir changé d'image si vous utilisez ensuite la taille de UIImageView pour définir UIScrollView contentSize et / ou calculer l'échelle de zoom

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
Miroslav Hrivik
la source
5
myUIImageview.image = UIImage (named:"myImage.png")
Helton Wernik
la source
1
Marqué comme de très faible qualité. Veuillez l'améliorer.
Tiré
Vous pouvez le faire en développant cela.
Rohit Gupta
2
UIColor * background = [[UIColor alloc] initWithPatternImage:
    [UIImage imageNamed:@"anImage.png"]];

self.view.backgroundColor = background;
[background release];
la perception
la source
Est-ce la même chose pour présenter l'image par l'arrière-plan d'UIView ou par la propriété image de UIImageView?
voromax
2

Cette question avait déjà beaucoup de réponses. Malheureusement, aucun n'a fonctionné pour moi. Donc, par souci de complétude, j'ajoute ce qui m'a aidé:

J'avais plusieurs images avec le même nom - je les ai donc commandées dans des sous-dossiers. Et j'avais le chemin complet vers le fichier image que je voulais montrer. Avec un chemin complet imageNamed:(comme utilisé dans toutes les solutions ci-dessus) ne fonctionnait pas et était la mauvaise méthode.

Au lieu de cela, j'utilise maintenant imageWithContentsOfFile:comme ceci:

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

Je ne sais pas, si quelqu'un lit aussi loin?

Si c'est le cas et que celui-ci vous a aidé: veuillez voter. ;-)

DerWOK
la source
1

Travailler avec Swift 5 (XCode 10.3) c'est juste

yourImageView.image = UIImage(named: "nameOfTheImage")
bytepunch
la source
0

Pour définir l'image sur votre imageView, utilisez la ligne de code ci-dessous,

self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];                         
Vaibhav Shiledar
la source
copiez l'image dans votre projet, puis utilisez le code ci-dessus
Vaibhav Shiledar