Ho un IBOutlet
in un UIImageView
, ma quando guardo il documento UIImageView
, non riesco a vedere alcun suggerimento su come modificarlo a livello di programmazione. Devo recuperare un oggetto UIImage
da quello UIImageView
?Come posso cambiare l'immagine visualizzata in UIImageView a livello di programmazione?
risposta
Se si dispone già di un IBOutlet su UIImageView, tutto ciò che si deve fare è catturare 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 si dispone di un'immagine è quindi possibile impostare UIImageView:
[imageView setImage:image];
La linea di cui sopra assume IMAGEVIEW è il vostro IBOutlet.
Questo è tutto! Se vuoi divertirti, puoi aggiungere l'immagine a un UIView e quindi aggiungere transizioni.
P.S. Gestione della memoria non inclusa.
Seguendo il consiglio di Jordan (che dovrebbe funzionare in realtà), cercare di impostare l'UIImageView per essere visibile:
[imageView setHidden: NO];
e anche - non dimenticare di allegare al UIView principale:
[mainView addSubview: imageView];
e per portare in primo piano:
[mainView bringSubviewToFront: imageView];
speranza che unisce tutti questi passaggi vi aiuterà solv e il mistero.
questo ha lavorato per me
[ImageViewName setImage:[UIImage imageNamed: @"ImageName.png"]];
assicurarsi che l'ImageView è dichiarato correttamente nel file h ed è collegata con l'elemento IB.
Per le persone che potrebbero cercare su Google questo tentativo di risolvere il problema, ricordarsi di dichiarare correttamente la proprietà nel file di intestazione e di sintetizzare UIImageView nel file di implementazione ... Sarà difficile da 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 vostro .m:
@implementation YOURCONTROLLERNAME
@synthesize imageToDisplay;
//etc, rest of code goes here
Da lì si dovrebbe andare bene usando qualcosa come il seguente per impostare la vostra immagine.
[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];
Grazie! Essendo nuovo per xcode e iphone in generale mi mancava il tuo YOURCONTROLLER prima di imageToDisplay. – Opy
Si noti che il file NIB non collega tutti gli IBOutlet fino a quando la vista non è stata aggiunta alla scena. Se si collegano le cose manualmente (cosa che si potrebbe fare se le cose si trovano in NIB separati) è importante tenerle a mente.
Quindi, se il mio controller della vista di prova ha un "IMAGEVIEW" wired da un pennino, questo probabilmente non funzionerà:
testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];
[self.view addSubview:testCardViewController.view];
ma questo sarà:
[self.view addSubview:testCardViewController.view];
testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];
Il mio problema è che ho ho provato a cambiare l'immagine in un altro thread. Ho fatto così:
- (void)changeImage {
backgroundImage.image = [UIImage imageNamed:@"img.png"];
}
chiamata con:
[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
Sì, questo bit me ... di nuovo ... Posso anche usare 'dispatch_async (dispatch_get_main_queue(),^{backgroundImage.image = [UIImage imageNamed: @" img.png "];})' – Dex
UIColor * background = [[UIColor alloc] initWithPatternImage:
[UIImage imageNamed:@"anImage.png"]];
self.view.backgroundColor = background;
[background release];
È lo stesso per immagine presente dallo sfondo di UIView o dalla proprietà dell'immagine di UIImageView? – voromax
Se si desidera impostare un'immagine per UIImageView
programmazione quindi non dimenticate di aggiungere UIImageView
come visualizzazione secondaria alla principale View.
E anche non dimenticato 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];
imageView.image = [UIImage imageNamed:@"myImage.png"];
Questa domanda già avuto un sacco di risposte. Sfortunatamente nessuno ha funzionato per me. Quindi per il piacere di completare aggiungo quello che mi ha aiutato:
Avevo più immagini con lo stesso nome - quindi le ho ordinate in sottocartelle. E ho avuto il percorso completo per il file immagine che volevo mostrare. Con un percorso completo imageNamed:
(come utilizzato in tutte le soluzioni sopra) non ha funzionato ed era il metodo sbagliato.
Invece io uso imageWithContentsOfFile:
in questo modo:
self.myUIImage.image = [UIImage imageWithContentsOfFile:_currentWord.imageFileName];
Non so, se qualcuno legge così lontano?
Se è così e questo ti ha aiutato: per favore vota. ;-)
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")!)!)
}
}
myUIImageview.image = UIImage (named:"myImage.png")
Contrassegnato come qualità molto bassa. Si prega di migliorare. – Drew
Puoi farlo espandendo su di esso. –
Non dimenticare di chiamare sizeToFit()
dopo aver modificato l'immagine Se quindi si utilizza dimensioni di UIImageView per impostare UIScrollView contentSize e/o calcolo scala di zoom
let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
Per impostare un'immagine del vostro uso IMAGEVIEW sotto la linea di codice,
self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];
copia l'immagine nel tuo progetto e quindi usa il codice sopra –
grazie, ma non funziona :( ho rimosso l'immagine nel generatore di interfaccia in modo che UIImageView sia vuoto. quindi l'ho implementato nel metodo viewDidLoad. Ma non succede nulla. Il nome dell'immagine è corretto al 100%. L'ho anche assegnato con setImage alla presa. Qualcos'altro che posso provare? – Thanks
Probabilmente non hai collegato IBOutlet al riferimento ViewController in IB. Verifica che l'immagine si trovi nella cartella Risorse. – Jordan
Non sono sicuro delle regole necro/impatto su SO, ma so che questo mi ha aiutato a risolvere il mio problema. Sto usando iOS v5.1, xcode 4.3.2 – Jake