Come posso modificare l'immagine visualizzata in un UIImageView a livello di codice?


134

Ho un IBOutleta UIImageView, ma quando guardo il UIImageViewdocumento, non riesco a vedere alcun suggerimento su come modificarlo a livello di programmazione. Devo recuperare un UIImageoggetto da quello UIImageView?

Risposte:


185

Se hai già un IBOutlet su UIImageView, tutto ciò che devi fare è prendere un'immagine e chiamare setImage sul ricevitore (UIImageView). Di seguito sono riportati due esempi di acquisizione di un'immagine. Uno dal Web e uno aggiunto alla cartella Risorse in 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 volta che hai un'immagine, puoi impostare UIImageView:

[imageView setImage:image];

La riga sopra presuppone che imageView sia il tuo IBOutlet.

Questo è tutto! Se vuoi divertirti, puoi aggiungere l'immagine a un UIView e quindi aggiungere transizioni.

Gestione della memoria PS non inclusa.


1
grazie, ma non funziona :( ho rimosso l'immagine nel generatore di interfaccia in modo che UIImageView sia vuoto. Poi l'ho implementato nel metodo viewDidLoad. Ma non succede nulla. Il nome dell'immagine è specificato al 100% corretto. L'ho anche assegnato con setImage alla presa. Qualcos'altro che posso provare?
Grazie

3
Probabilmente non hai collegato IBOutlet al riferimento ViewController in IB. Verifica che l'immagine sia nella cartella Risorse.
Giordania

Non sono sicuro delle regole / impatto del necro su SO, ma so che questo mi ha aiutato a risolvere il mio problema. Sto usando iOS v5.1, xcode 4.3.2
Jake,

1
Verificare che [UIViewController viewDidLoad] sia chiamato prima di modificare l'immagine. L'ho intrappolato. 8)
poGUIst

1
Aggiungendo a questa soluzione, se si utilizza Image Asset Catalog, è sufficiente specificare il nome del set di immagini, ad es. UIImage * image = [UIImage imageNamed: @ "My Icon"]; invece di UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS,

37

Si noti che il file NIB non collega tutti gli IBOutlet fino a quando la vista non viene aggiunta alla scena. Se stai cablando le cose manualmente (cosa che potresti fare se le cose si trovano in NIB separati) questo è importante da tenere a mente.

Quindi, se il mio controller di visualizzazione test ha un "imageView" cablato da un pennino, probabilmente questo non funzionerà:

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

Ma questo:

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

29

Questo ha funzionato per me

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

Assicurarsi che ImageView sia dichiarato correttamente nel file .h e sia collegato con l'elemento IB.



16

Ai fini delle persone che potrebbero cercare su Google questo per cercare di risolvere il loro problema, ricordarsi di dichiarare correttamente la proprietà nel file di intestazione e di sintetizzare UIImageView nel file di implementazione ... Sarà difficile impostare l'immagine a livello di codice senza metodi getter e setter.

#import <UIKit/UIKit.h>

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

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

@end

e poi nel tuo .m:

@implementation YOURCONTROLLERNAME

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

Da lì dovresti andare bene usando qualcosa di simile al seguente per impostare la tua immagine.

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

Grazie! Essendo nuovo su xcode e iPhone in generale, mi mancava il YOURCONTROLLER prima di imageToDisplay.
Opy,

15

Esempio in 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

Seguendo il consiglio di Jordan (che dovrebbe funzionare effettivamente), prova a impostare UIImageView in modo che sia visibile:

 [imageView setHidden: NO];

e inoltre - non dimenticare di collegarlo all'UIView principale:

[mainView addSubview: imageView];

e per portare in primo piano:

[mainView bringSubviewToFront: imageView];

Spero che combinare tutti questi passaggi ti aiuterà a risolvere il mistero.


8

Il mio problema era che ho provato a cambiare l'immagine in un altro thread. Mi è piaciuto questo:

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

Chiama con:

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

2
Sì, questo mi ha morso ... di nuovo ... Può anche usaredispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex il

7

Se si desidera impostare l'immagine su UIImageViewprogrammaticamente, non dimenticare di aggiungere UIImageView come SubView alla vista principale.

E non dimenticare di impostare ImageView Frame .

ecco il codice

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

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

[self.view addSubview:myImage];

7

Non dimenticare di chiamare sizeToFit()dopo aver modificato l'immagine se si utilizza la dimensione di UIImageView per impostare il contenuto UIScrollView Dimensione e / o calcolo scala 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];

È lo stesso per presentare l'immagine dello sfondo di UIView o della proprietà dell'immagine di UIImageView?
voromax,

2

Questa domanda aveva già molte risposte. Purtroppo nessuno ha funzionato per me. Quindi, per amor di completenes, aggiungo ciò che mi ha aiutato:

Avevo più immagini con lo stesso nome, quindi le ho ordinate in sottocartelle. E ho avuto il percorso completo del file di immagine che volevo mostrare. Con un percorso completo imageNamed:(come utilizzato in tutte le soluzioni sopra) non ha funzionato ed è stato il metodo sbagliato.

Invece ora uso imageWithContentsOfFile:così:

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

Non lo so, se qualcuno legge così lontano?

Se è così e questo ti ha aiutato: vota per favore. ;-)


1

Lavorare con Swift 5 (XCode 10.3) è solo

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

0

Per impostare l'immagine su imageView, utilizzare sotto la riga di codice,

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

copia l'immagine nel tuo progetto e poi usa il codice sopra
Vaibhav Shiledar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.