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?

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.


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"];

29

Ini berhasil untuk saya

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

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



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]];

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

}

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.


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];

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];

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

4
myUIImageview.image = UIImage (named:"myImage.png")

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];

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. ;-)


2

Bekerja dengan Swift 5 (XCode 10.3) itu saja

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

0

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

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

salin Gambar dalam proyek Anda dan kemudian gunakan kode di atas
Vaibhav Shiledar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.