Wie kann ich das in einer UIImageView angezeigte Bild programmgesteuert ändern?

134

Ich habe ein IBOutletbis ein UIImageView, aber wenn ich mir das UIImageViewDokument ansehe, sehe ich keine Hinweise darauf, wie ich es programmgesteuert ändern kann. Muss ich daraus ein UIImageObjekt holen UIImageView?

Vielen Dank
quelle

Antworten:

185

Wenn Sie bereits ein IBOutlet für eine UIImageView haben, müssen Sie nur ein Bild abrufen und setImage auf dem Empfänger (UIImageView) aufrufen. Im Folgenden finden Sie zwei Beispiele für das Aufnehmen eines Bildes. Eine aus dem Web und eine, die Sie in Xcode zu Ihrem Ressourcenordner hinzufügen.

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

oder

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

Sobald Sie ein Bild haben, können Sie UIImageView einstellen:

[imageView setImage:image];

In der obigen Zeile wird davon ausgegangen, dass imageView Ihr IBOutlet ist.

Das ist es! Wenn Sie Lust haben, können Sie das Bild zu einer UIView hinzufügen und dann Übergänge hinzufügen.

PS Speicherverwaltung nicht enthalten.

Jordanien
quelle
1
danke, aber es funktioniert nicht :( Ich habe das Bild im Interface Builder entfernt, damit die UIImageView leer ist. Dann habe ich dies in die viewDidLoad-Methode implementiert. Aber es passiert nichts. Der Bildname ist zu 100% korrekt angegeben. Ich habe ihn auch mit setImage zugewiesen Was kann ich sonst noch versuchen?
Danke
3
Sie haben das IBOutlet wahrscheinlich nicht mit der ViewController-Referenz in IB verbunden. Überprüfen Sie, ob sich das Bild im Ordner Ressourcen befindet.
Jordanien
Ich bin nicht sicher, welche Nekro-Regeln / Auswirkungen auf SO vorliegen, aber ich weiß, dass dies mir geholfen hat, mein Problem zu lösen. Ich benutze iOS v5.1, xcode 4.3.2
Jake
1
Überprüfen Sie, ob [UIViewController viewDidLoad] aufgerufen wird, bevor Sie das Bild ändern. Ich bin davon gefangen. 8)
PoGUIst
1
Wenn Sie diese Lösung hinzufügen und Image Asset Catalog verwenden, geben Sie einfach den Namen Ihres Image-Sets an, z. B. UIImage * image = [UIImage imageNamed: @ "My Icon"]; anstelle von UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS
37

Beachten Sie, dass die NIB-Datei nicht alle IBOutlets verkabelt, bis die Ansicht zur Szene hinzugefügt wurde. Wenn Sie die Dinge manuell verkabeln (was Sie möglicherweise tun, wenn sich die Dinge in separaten NIBs befinden), ist dies wichtig zu beachten.

Wenn mein Test View Controller eine "imageView" hat, die von einer Feder verkabelt ist, funktioniert dies wahrscheinlich nicht:

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

Aber das wird:

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

Das hat bei mir funktioniert

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

Stellen Sie sicher, dass ImageView in der .h-Datei ordnungsgemäß deklariert und mit dem IB-Element verknüpft ist.

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

Denken Sie daran, die Eigenschaft in Ihrer Header-Datei ordnungsgemäß zu deklarieren und die UIImageView in Ihrer Implementierungsdatei zu synthetisieren, damit Personen, die dies möglicherweise googeln, versuchen, ihr Problem zu lösen Getter- und Setter-Methoden.

#import <UIKit/UIKit.h>

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

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

@end

und dann in deiner .m:

@implementation YOURCONTROLLERNAME

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

Von dort aus sollten Sie in Ordnung sein, wenn Sie Folgendes verwenden, um Ihr Bild einzustellen.

[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];
Swiecki
quelle
Vielen Dank! Da ich neu bei xcode und iphones im Allgemeinen bin, fehlte mir der YOURCONTROLLER vor dem imageToDisplay.
Opy
15

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

}
König-Zauberer
quelle
9

Befolgen Sie die Anweisungen von Jordan (die eigentlich funktionieren sollten), und legen Sie fest, dass UIImageView sichtbar ist:

 [imageView setHidden: NO];

und auch - vergessen Sie nicht, es an die Haupt-UIView anzuhängen:

[mainView addSubview: imageView];

und nach vorne zu bringen:

[mainView bringSubviewToFront: imageView];

Die Hoffnung, all diese Schritte zu kombinieren, wird Ihnen helfen, das Rätsel zu lösen.

Adi
quelle
8

Mein Problem war, dass ich versucht habe, das Bild in einem anderen Thread zu ändern. Mir hat das gefallen:

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

Rufen Sie an mit:

[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
Okku
quelle
2
Yup, das hat mich gebissen ... wieder ... Kann auch verwendendispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex
7

Wenn Sie das Bild UIImageViewprogrammgesteuert einstellen möchten, vergessen Sie nicht, es UIImageView als Unteransicht zur Hauptansicht hinzuzufügen .

Und vergessen Sie auch nicht, ImageView Frame einzustellen .

Hier ist der Code

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

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

[self.view addSubview:myImage];
Rajneesh071
quelle
7

Vergessen Sie nicht, sizeToFit()nach dem Ändern des Bildes aufzurufen, wenn Sie dann die Größe von UIImageView verwenden, um UIScrollView contentSize festzulegen und / oder die Zoomskala zu berechnen

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
Miroslav Hrivik
quelle
5
myUIImageview.image = UIImage (named:"myImage.png")
Helton Wernik
quelle
1
Als sehr niedrige Qualität gekennzeichnet. Bitte verbessern Sie es.
Drew
Sie können dies tun, indem Sie es erweitern.
Rohit Gupta
2
UIColor * background = [[UIColor alloc] initWithPatternImage:
    [UIImage imageNamed:@"anImage.png"]];

self.view.backgroundColor = background;
[background release];
Wahrnehmung
quelle
Ist dies dasselbe, um ein Bild nach dem Hintergrund von UIView oder nach der Bildeigenschaft von UIImageView darzustellen?
Voromax
2

Diese Frage hatte bereits viele Antworten. Leider hat keiner für mich gearbeitet. Der Vollständigkeit halber füge ich hinzu, was mir geholfen hat:

Ich hatte mehrere Bilder mit demselben Namen - also habe ich sie in Unterordnern bestellt. Und ich hatte den vollständigen Pfad zu der Bilddatei, die ich anzeigen wollte. Mit einem vollständigen Pfad imageNamed:(wie in allen obigen Lösungen verwendet) funktionierte nicht und war die falsche Methode.

Stattdessen benutze ich jetzt imageWithContentsOfFile:so:

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

Weiß nicht, ob jemand so weit liest?

Wenn ja und dieser hat dir geholfen: bitte stimme ab. ;-);

DerWOK
quelle
1

Mit Swift 5 (XCode 10.3) ist es einfach

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

Um das Bild in Ihrer imageView festzulegen, verwenden Sie die folgende Codezeile:

self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];                         
Vaibhav Shiledar
quelle
Kopieren Sie das Bild in Ihr Projekt und verwenden Sie dann den obigen Code
Vaibhav Shiledar