Bagaimana saya bisa mengubah gambar yang ditampilkan di UIImageView secara terprogram?

134

Saya memiliki IBOutletke a UIImageView, tetapi ketika saya melihat UIImageViewdokumen, saya tidak dapat melihat petunjuk tentang mengubahnya secara terprogram. Apakah saya harus mengambil UIImageobjek dari itu UIImageView?

Terima kasih
sumber

Jawaban:

185

Jika Anda sudah memiliki IBOutlet ke UIImageView, yang harus Anda lakukan hanyalah mengambil gambar dan memanggil setImage pada penerima (UIImageView). Dua contoh mengambil gambar ada di bawah. Satu dari Web, dan satu lagi yang Anda tambahkan ke folder Resources di Xcode.

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

atau

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

Setelah Anda memiliki Image, Anda dapat mengatur UIImageView:

[imageView setImage:image];

Baris di atas mengasumsikan imageView adalah IBOutlet Anda.

Itu dia! Jika Anda ingin terlihat keren, Anda dapat menambahkan gambar ke UIView dan kemudian menambahkan transisi.

Manajemen Memori PS tidak termasuk.

Yordania
sumber
1
terima kasih, tetapi tidak berhasil :( saya menghapus gambar di pembuat antarmuka sehingga UIImageView kosong. kemudian saya menerapkan ini ke dalam metode viewDidLoad. Tetapi tidak ada yang terjadi. Nama gambar ditentukan 100% benar. Saya juga menetapkannya dengan setImage ke outlet. Ada lagi yang bisa saya coba?
Terima kasih
3
Anda mungkin belum menghubungkan IBOutlet ke referensi ViewController di IB. Periksa gambar di folder Resources.
Yordania
Saya tidak yakin aturan / dampak necro pada SO, tetapi saya tahu ini membantu saya memecahkan masalah saya. Saya menggunakan iOS v5.1, xcode 4.3.2
Jake
1
Periksa apakah [UIViewController viewDidLoad] dipanggil sebelum mengubah gambar. Saya telah terjebak olehnya. 8)
poGUIst
1
Menambahkan solusi ini, jika Anda menggunakan Katalog Aset Gambar, cukup tentukan nama kumpulan gambar Anda misalnya UIImage * image = [UIImage imageNamed: @ "My Icon"]; alih-alih UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS
37

Perhatikan bahwa file NIB tidak menghubungkan semua IBOutlets sampai view telah ditambahkan ke scene. Jika Anda memasang kabel secara manual (yang mungkin Anda lakukan jika ada dalam NIB terpisah), ini penting untuk diingat.

Jadi jika pengontrol tampilan pengujian saya memiliki "imageView" yang dihubungkan oleh ujung pena, ini mungkin tidak akan berfungsi:

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

Tapi ini akan:

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

Ini berhasil untuk saya

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

Pastikan ImageView dideklarasikan dengan benar di file .h dan ditautkan dengan elemen IB.

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

Untuk tujuan orang-orang yang mungkin melakukan googling ini untuk mencoba menyelesaikan masalah mereka, ingatlah untuk mendeklarasikan properti dengan benar di file header Anda dan untuk mensintesis UIImageView dalam file implementasi Anda ... Akan sulit untuk menyetel gambar secara terprogram tanpa metode pengambil dan penyetel.

#import <UIKit/UIKit.h>

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

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

@end

lalu di .m Anda:

@implementation YOURCONTROLLERNAME

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

Dari sana Anda akan baik-baik saja menggunakan sesuatu seperti berikut ini untuk mengatur gambar Anda.

[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];
swiecki
sumber
Terima kasih! Menjadi baru untuk xcode dan iphones secara umum saya kehilangan PENGONTROL ANDA sebelum imageToDisplay.
Opy
15

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

}
Raja-Penyihir
sumber
9

Mengikuti saran Jordan (yang seharusnya berfungsi dengan baik), coba setel UIImageView agar terlihat:

 [imageView setHidden: NO];

dan juga - jangan lupa untuk melampirkannya ke UIView utama:

[mainView addSubview: imageView];

dan untuk dibawa ke depan:

[mainView bringSubviewToFront: imageView];

Semoga menggabungkan semua langkah ini akan membantu Anda memecahkan misteri itu.

Adi
sumber
8

Masalah saya adalah saya mencoba mengubah gambar di utas lain. Saya suka ini:

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

Telepon dengan:

[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
Okku
sumber
2
Yup, ini menggigit saya ... lagi ... Bisa juga menggunakandispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex
7

Jika Anda ingin mengatur gambar ke UIImageViewprogramatik maka Jangan Lupa untuk menambahkan UIImageView sebagai SubView ke Tampilan utama.

Dan juga jangan lupa untuk mengatur ImageView Frame .

ini kodenya

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

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

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

Jangan lupa untuk memanggil sizeToFit()setelah Anda mengubah gambar jika Anda kemudian menggunakan ukuran UIImageView untuk menyetel UIScrollView contentSize dan / atau menghitung skala zoom

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
Miroslav Hrivik
sumber
4
myUIImageview.image = UIImage (named:"myImage.png")
Helton Wernik
sumber
1
Ditandai sebagai Kualitas Sangat Rendah. Tolong perbaiki.
Drew
Anda dapat melakukannya dengan mengembangkannya.
Rohit Gupta
2
UIColor * background = [[UIColor alloc] initWithPatternImage:
    [UIImage imageNamed:@"anImage.png"]];

self.view.backgroundColor = background;
[background release];
Persepsi
sumber
Apakah ini sama untuk menampilkan gambar berdasarkan latar belakang UIView atau dengan properti gambar UIImageView?
voromax
2

Pertanyaan ini sudah punya banyak jawaban. Sayangnya tidak ada yang berhasil untuk saya. Jadi demi melengkapi saya menambahkan apa yang membantu saya:

Saya memiliki banyak gambar dengan nama yang sama - jadi saya memesannya dalam sub folder. Dan saya memiliki jalur lengkap ke file gambar yang ingin saya tunjukkan. Dengan jalur lengkap imageNamed:(seperti yang digunakan dalam semua solusi di atas) tidak berfungsi dan merupakan metode yang salah.

Sebagai gantinya saya sekarang menggunakan imageWithContentsOfFile:seperti ini:

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

Tidak tahu, apakah ada yang membaca sejauh itu?

Jika demikian dan yang ini membantu Anda: harap beri suara. ;-)

DerWOK
sumber
2

Bekerja dengan Swift 5 (XCode 10.3) itu saja

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

Untuk mengatur gambar pada imageView Anda, gunakan baris kode di bawah ini,

self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];                         
Vaibhav Shiledar
sumber
salin Gambar dalam proyek Anda dan kemudian gunakan kode di atas
Vaibhav Shiledar