Bir UIImageView içinde görüntülenen görüntüyü programlı olarak nasıl değiştirebilirim?


134

Bir var IBOutletbir için UIImageView, ama ben baktığımda UIImageViewdoc, ben program aracılığıyla değiştirme hakkında herhangi bir ipucu göremiyorum. Bundan bir UIImagenesne getirmem gerekiyor UIImageViewmu?

Yanıtlar:


185

Zaten bir UIImageView için IBOutlet'iniz varsa, yapmanız gereken tek şey bir görüntü almak ve alıcıda setImage'ı (UIImageView) çağırmaktır. Bir görüntüyü yakalamanın iki örneği aşağıdadır. Biri Web'den, diğeri ise Xcode'daki Kaynaklar klasörünüze eklersiniz.

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

veya

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

Bir Görüntünüz olduğunda UIImageView'ı ayarlayabilirsiniz:

[imageView setImage:image];

Yukarıdaki satır imageView öğesinin IBOutlet'iniz olduğunu varsayar.

Bu kadar! Süslü olmak istiyorsanız, görüntüyü bir UIView'e ekleyebilir ve sonra geçişler ekleyebilirsiniz.

PS Bellek yönetimi dahil değildir.


1
teşekkürler, ama çalışmıyor :( Ben UIImageView boş böylece arabirim oluşturucu görüntü kaldırıldı. sonra ben viewDidLoad yöntemine uygulandı. Ama hiçbir şey olmaz. Görüntü adı% 100 doğru belirtildi. Ben de setImage ile atandı Deneyebileceğim başka bir şey var mı?
Teşekkürler

3
Büyük olasılıkla IBOutlet'i IB'deki ViewController referansına bağlamamışsınızdır. Görüntünün Kaynaklar klasöründe olup olmadığını kontrol edin.
Ürdün

Nekro kurallarının / SO üzerindeki etkisinin emin değilim, ama bunun sorunumu çözmeme yardımcı olduğunu biliyorum. İOS v5.1, xcode 4.3.2 kullanıyorum
Jake

1
Görüntüyü değiştirmeden önce [UIViewController viewDidLoad] öğesinin çağrıldığını kontrol edin. Onu tuzağa düşürdüm. 8)
poGUIst

1
Bu çözüme eklediğinizde, Görüntü Varlığı Kataloğu kullanıyorsanız, görüntü kümenizin adını belirtin, örneğin UIImage * image = [UIImage imageNamed: @ "My Icon"]; UIImage yerine * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS

37

Görünüm sahneye ekleninceye kadar NIB dosyasının tüm IBOutlet'leri bağlamadığını unutmayın. Bir şeyleri manuel olarak bağlıyorsanız (işler ayrı NIB'lerde yapıyorsanız, bunu aklınızda bulundurmanız önemlidir).

Test görünüm denetleyicim bir uç tarafından kablolu bir "imageView" varsa, bu muhtemelen işe yaramaz:

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

Ancak bu:

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

29

Bu benim için çalıştı

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

ImageView'ın .h dosyasında düzgün bir şekilde bildirildiğinden ve IB öğesiyle bağlantılı olduğundan emin olun.



16

Sorununu çözmek için bu işi yapan kişilerin amacı için başlık dosyanızdaki özelliği doğru bir şekilde bildirmeyi ve uygulama dosyanızdaki UIImageView'ı sentezlemeyi unutmayın ... Görüntüyü programlı olarak alıcı ve ayarlayıcı yöntemleri.

#import <UIKit/UIKit.h>

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

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

@end

ve sonra .m'nizde:

@implementation YOURCONTROLLERNAME

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

Oradan görüntünüzü ayarlamak için aşağıdakine benzer bir şey kullanmalısınız.

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

Teşekkürler! Genel olarak xcode ve iphone'lar için yeni olmak ben imageToDisplay önce YOURCONTROLLER eksikti.
Opy

15

Örnek 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

Ürdün'ün tavsiyelerine uyarak (gerçekten çalışması gerekir), UIImageView'ı görünür olacak şekilde ayarlamaya çalışın:

 [imageView setHidden: NO];

ve ayrıca - ana UIView'e eklemeyi unutmayın:

[mainView addSubview: imageView];

öne getirmek için:

[mainView bringSubviewToFront: imageView];

Umarım tüm bu adımları birleştirmek gizemi çözmenize yardımcı olacaktır.


8

Benim sorunum başka bir iş parçacığında görüntüyü değiştirmeye çalıştım oldu. Bunu beğendim:

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

İle ara:

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

2
Evet, bu beni biraz ... tekrar ... Ayrıca kullanabilirsinizdispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex

7

Görüntüyü UIImageViewprogramlı olarak ayarlamak istiyorsanız , ana görünüme SubViewUIImageView olarak eklemeyi unutmayın .

Ve ayrıca ImageView Frame ayarlamayı unutma .

işte kod

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

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

[self.view addSubview:myImage];

7

sizeToFit()UIScrollView içeriğini ayarlamak için UIImageView boyutunu kullanırsanız, görüntüyü değiştirdikten sonra aramayı unutmayın.

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size

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

1
Çok Düşük Kalite olarak işaretlendi. Lütfen geliştirin.
Drew

Bunu genişleterek yapabilirsiniz.
Rohit Gupta

2
UIColor * background = [[UIColor alloc] initWithPatternImage:
    [UIImage imageNamed:@"anImage.png"]];

self.view.backgroundColor = background;
[background release];

Bu, UIView'in arka planına veya UIImageView'ın image özelliğine göre görüntü sunmak için aynı mıdır?
voromax

2

Bu sorunun zaten çok fazla cevabı vardı. Ne yazık ki hiçbiri benim için işe yaramadı. Tamamlayıcılar uğruna bana yardımcı olanı ekliyorum:

Aynı ada sahip birden fazla resmim vardı - bu yüzden onları alt klasörlerde sipariş ettim. Ve göstermek istediğim görüntü dosyasının tam yolunu buldum. Tam bir yol ile imageNamed:(yukarıdaki tüm çözümlerde kullanıldığı gibi) işe yaramadı ve yanlış yöntemdi.

Bunun yerine şimdi böyle kullanın imageWithContentsOfFile::

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

Bilmiyorum, bu kadar okuyan var mı?

Eğer öyleyse ve bu size yardımcı oldu: lütfen oy verin. ;-)


1

Swift 5 (XCode 10.3) ile çalışmak sadece

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

0

ImageView'ınızdaki resmi ayarlamak için aşağıdaki kod satırını kullanın,

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

Projenizdeki resmi kopyalayın ve yukarıdaki kodu kullanın
Vaibhav Shiledar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.