Làm cách nào để thay đổi hình ảnh được hiển thị trong UIImageView theo chương trình?


134

Tôi có IBOutletmột UIImageView, nhưng khi tôi xem UIImageViewtài liệu, tôi không thể thấy bất kỳ gợi ý nào về việc thay đổi nó theo chương trình. Tôi có phải lấy một UIImageđối tượng từ đó UIImageViewkhông?

Câu trả lời:


185

Nếu bạn đã có IBOutlet cho UIImageView, thì tất cả những gì bạn phải làm là lấy một hình ảnh và gọi setImage trên máy thu (UIImageView). Hai ví dụ về việc lấy một hình ảnh dưới đây. Một từ Web và một bạn thêm vào thư mục Tài nguyên của mình trong Xcode.

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

hoặc là

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

Khi bạn có Hình ảnh, bạn có thể đặt UIImageView:

[imageView setImage:image];

Dòng trên giả định imageView là IBOutlet của bạn.

Đó là nó! Nếu bạn muốn có được sự ưa thích, bạn có thể thêm hình ảnh vào một UIView và sau đó thêm hiệu ứng chuyển tiếp.

Quản lý bộ nhớ PS không bao gồm.


1
cảm ơn, nhưng nó không hoạt động :( tôi đã xóa hình ảnh trong trình xây dựng giao diện để UIImageView trống. Sau đó, tôi đã triển khai điều này vào phương thức viewDidLoad. Nhưng không có gì xảy ra. Tên hình ảnh được chỉ định đúng 100%. Tôi cũng đã gán nó với setImage đến cửa hàng. Tôi có thể thử bất cứ điều gì khác không?
Cảm ơn

3
Có lẽ bạn chưa kết nối IBOutlet với tham chiếu ViewContoder trong IB. Kiểm tra hình ảnh trong thư mục Tài nguyên.
Jordan

Tôi không chắc chắn các quy tắc / tác động của Necro đối với SO, nhưng tôi biết điều này đã giúp tôi giải quyết vấn đề của mình. Tôi đang sử dụng iOS v5.1, xcode 4.3.2
Jake

1
Kiểm tra [UIViewControll viewDidLoad] được gọi trước khi thay đổi hình ảnh. Tôi đã bị mắc kẹt bởi nó. 8)
poGUIst

1
Thêm vào giải pháp này, nếu bạn đang sử dụng Danh mục tài sản hình ảnh, chỉ cần chỉ định tên của bộ ảnh của bạn, ví dụ: UIImage * image = [UIImage imageNamed: @ "Biểu tượng của tôi"]; thay vì UIImage * image = [UIImage image Named: @ "myicon.png"];
Keith OYS

37

Lưu ý rằng tệp NIB không kết nối tất cả các IBOutlets cho đến khi chế độ xem được thêm vào cảnh. Nếu bạn kết nối mọi thứ bằng tay (mà bạn có thể đang làm nếu mọi thứ nằm trong các NIB riêng biệt) thì điều này rất quan trọng để ghi nhớ.

Vì vậy, nếu bộ điều khiển xem thử nghiệm của tôi có "imageView" được nối bởi ngòi, thì điều này có thể sẽ không hoạt động:

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

Nhưng điều này sẽ:

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

29

Điều này làm việc cho tôi

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

Đảm bảo rằng ImageView được khai báo đúng trong tệp .h và được liên kết với phần tử IB.



16

Với mục đích của những người có thể giải quyết vấn đề này để cố gắng giải quyết vấn đề của họ, hãy nhớ khai báo đúng tài sản trong tệp tiêu đề của bạn và tổng hợp UIImageView trong tệp triển khai của bạn ... Sẽ rất khó để thiết lập hình ảnh theo chương trình mà không phương thức getter và setter.

#import <UIKit/UIKit.h>

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

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

@end

và sau đó trong .m của bạn:

@implementation YOURCONTROLLERNAME

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

Từ đó bạn sẽ ổn khi sử dụng một cái gì đó như sau để thiết lập hình ảnh của bạn.

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

Cảm ơn! Là người mới đối với xcode và iphones nói chung, tôi đã thiếu YOUCONTROLLER trước imageToDisplay.
Opy

15

Ví dụ trong 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

Theo lời khuyên của Jordan (nên hoạt động thực sự), hãy thử đặt UIImageView hiển thị:

 [imageView setHidden: NO];

và cũng - đừng quên gắn nó vào UIView chính:

[mainView addSubview: imageView];

và để đưa ra phía trước:

[mainView bringSubviewToFront: imageView];

Hy vọng kết hợp tất cả các bước này sẽ giúp bạn giải quyết bí ẩn.


8

Vấn đề của tôi là tôi đã cố gắng thay đổi hình ảnh trong một chủ đề khác. Tôi đã làm như thế này:

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

Gọi với:

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

2
Yup, bit này tôi ... một lần nữa ... Cũng có thể sử dụngdispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex

7

Nếu bạn muốn đặt hình ảnh thành UIImageViewlập trình thì đừng quên thêm UIImageView dưới dạng SubView vào Chế độ xem chính.

Và cũng đừng quên thiết lập ImageView Frame .

đây là mã

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

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

[self.view addSubview:myImage];

7

Đừng quên gọi sizeToFit()sau khi bạn thay đổi hình ảnh nếu sau đó bạn sử dụng kích thước của UIImageView để đặt UIScrollView contentSize và / hoặc tính tỷ lệ thu phóng

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

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

1
Được gắn cờ là Chất lượng rất thấp. Hãy cải thiện nó.
vẽ

Bạn có thể làm điều đó bằng cách mở rộng trên nó.
Rohit Gupta

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

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

Đây có phải là giống nhau để trình bày hình ảnh bởi nền của UIView hoặc bởi thuộc tính hình ảnh của UIImageView?
voromax

2

Câu hỏi này đã có rất nhiều câu trả lời. Thật không may, không ai làm việc cho tôi. Vì vậy, để hoàn thành, tôi thêm những gì đã giúp tôi:

Tôi có nhiều hình ảnh có cùng tên - vì vậy tôi đã đặt chúng trong các thư mục phụ. Và tôi đã có đường dẫn đầy đủ đến tập tin hình ảnh mà tôi muốn hiển thị. Với một đường dẫn đầy đủ imageNamed:(như được sử dụng trong tất cả các giải pháp ở trên) đã không hoạt động và là phương pháp sai.

Thay vào đó bây giờ tôi sử dụng imageWithContentsOfFile:như vậy:

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

Không biết, nếu có ai đọc đến đó?

Nếu vậy và điều này đã giúp bạn: xin vui lòng bỏ phiếu. ;-)


1

Hoạt động với Swift 5 (XCode 10.3) chỉ là

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

0

Để đặt hình ảnh trên imageView của bạn, hãy sử dụng dòng mã bên dưới

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

sao chép hình ảnh trong dự án của bạn và sau đó sử dụng mã trên
Vaibhav Shiledar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.