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?

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.


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

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.



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

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

}

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.


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

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

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

5
myUIImageview.image = UIImage (named:"myImage.png")

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

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. ;-)


1

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

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

0

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

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

copiez l'image dans votre projet, puis utilisez le code ci-dessus
Vaibhav Shiledar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.