web-dev-qa-db-fra.com

Comment puis-je modifier par programme l'image affichée dans un UIImageView?

J'ai un IBOutlet à un UIImageView, mais quand je regarde le doc UIImageView, je ne vois aucune indication sur le fait de le modifier par programme. Dois-je extraire un objet UIImage de cette UIImageView?

131
Thanks

Si vous avez déjà un objet IBOutlet sur un UIImageView, il vous suffit de saisir une image et d'appeler setImage sur le récepteur (UIImageView). Vous trouverez ci-dessous deux exemples de saisie d’une image. Une du Web et une autre que vous ajoutez à votre dossier Ressources 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 à une vue UIView, puis ajouter des transitions. 

P.S. Gestion de la mémoire non incluse.

185
Jordan

Notez que le fichier NIB ne connecte pas tous les IBOutlets tant que la vue n'a pas été ajoutée à la scène. Si vous connectez manuellement des éléments (ce que vous faites peut-être si les éléments sont dans des cartes d'interface réseau distinctes), il est important de le garder à l'esprit.

Donc, si mon contrôleur de vue de test a un "imageView" câblé par une plume, 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"];
37
samkass

Cela a fonctionné pour moi

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

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

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

Pour aider les personnes qui cherchent peut-être à chercher cela afin de résoudre leur problème, souvenez-vous de bien déclarer la propriété dans votre fichier d'en-tête et de synthétiser UIImageView dans votre fichier d'implémentation ... méthodes getter et setter.

#import <UIKit/UIKit.h>

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

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

@end

et puis dans votre .m:

@implementation YOURCONTROLLERNAME

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

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

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

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

}
13
King-Wizard

Suivant les conseils de Jordan (qui devrait fonctionner en réalité), essayez de rendre visible UIImageView: 

 [imageView setHidden: NO];

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

[mainView addSubview: imageView];

et à porter au front: 

[mainView bringSubviewToFront: imageView];

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

9
Adi

Mon problème était que j'ai essayé de changer l'image dans un autre thread. J'ai fait comme ça:

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

Appeler avec:

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

Si vous souhaitez définir une image sur UIImageView par programme, n'oubliez pas d'ajouter UIImageView en tant que SubView à la vue principale.

Et n'oubliez pas 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
Rajneesh071

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 le facteur de zoom

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
6
Miroslav Hrivik
myUIImageview.image = UIImage (named:"myImage.png")
4
Helton Wernik

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

J'ai eu plusieurs images avec le même nom - donc je les ai 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: (tel qu'utilisé dans toutes les solutions ci-dessus) ne fonctionnait pas et était une mauvaise méthode. 

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

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

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

Si tel est le cas et celui-ci vous a aidé: merci de voter . ;-)

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

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

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

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

Pour définir une image sur votre image, utilisez la ligne de code ci-dessous.

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