Как программно изменить изображение, отображаемое в UIImageView?


134

У меня есть IBOutleta a UIImageView, но когда я смотрю на UIImageViewдокумент, я не вижу никаких подсказок о программном изменении его. Должен ли я получить UIImageобъект от этого UIImageView?

Ответы:


185

Если у вас уже есть IBOutlet для UIImageView, то все, что вам нужно сделать, это захватить изображение и вызвать setImage на приемнике (UIImageView). Два примера захвата изображения приведены ниже. Один из Интернета, а другой вы добавляете в папку ресурсов в XCode.

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

или

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

Когда у вас есть изображение, вы можете установить UIImageView:

[imageView setImage:image];

Строка выше предполагает, что imageView - ваш IBOutlet.

Это оно! Если вы хотите получить фантазию, вы можете добавить изображение в UIView, а затем добавить переходы.

PS Управление памятью не включено.


1
спасибо, но это не работает :( я удалил изображение в конструкторе интерфейсов, поэтому UIImageView пуст. Затем я реализовал это в метод viewDidLoad. Но ничего не происходит. Имя изображения указано на 100% правильно. Я также назначил его с помощью setImage к выходу. Что-нибудь еще, что я могу попробовать?
Спасибо

3
Возможно, вы не подключили IBOutlet к ссылке на ViewController в IB. Проверьте изображение в папке ресурсов.
Иордания

Я не уверен, что правила некро / влияние на SO, но я знаю, что это помогло мне решить мою проблему. Я использую iOS v5.1, xcode 4.3.2
Джейк

1
Проверка на [UIViewController viewDidLoad] вызывается перед изменением изображения. Я пойман в ловушку этим. 8)
poGUIst

1
В дополнение к этому решению, если вы используете Image Asset Catalog, просто укажите имя вашего набора изображений, например, UIImage * image = [UIImage imageNamed: @ "My Icon"]; вместо UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Кит ОЙС

37

Обратите внимание, что файл NIB не соединяет все IBOutlets, пока представление не будет добавлено к сцене. Если вы подключаете вещи вручную (что вы можете делать, если они находятся в отдельных NIB), это важно иметь в виду.

Так что, если в моем контроллере тестового вида есть «imageView», подключенный через перо, это, вероятно, не будет работать:

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

Но это будет:

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

29

Это сработало для меня

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

Убедитесь, что ImageView правильно объявлен в файле .h и связан с элементом IB.



16

Чтобы люди, которые могут прибегнуть к помощи, попытались решить свою проблему, не забудьте правильно объявить свойство в вашем заголовочном файле и синтезировать UIImageView в вашем файле реализации ... Будет трудно установить изображение программно без методы получения и установки.

#import <UIKit/UIKit.h>

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

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

@end

а потом в твоем .m:

@implementation YOURCONTROLLERNAME

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

Оттуда вы должны быть в порядке, используя что-то вроде следующего, чтобы установить свое изображение.

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

Спасибо! Будучи новичком в xcode и iphones в целом, мне не хватало YOURCONTROLLER до появления imageToDisplay.
Опи

15

Пример в 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

Следуя совету Джордана (который должен работать на самом деле), попробуйте сделать UIImageView видимым:

 [imageView setHidden: NO];

а также - не забудьте прикрепить его к основному UIView:

[mainView addSubview: imageView];

и вывести на фронт:

[mainView bringSubviewToFront: imageView];

Надеюсь, что объединение всех этих шагов поможет вам разгадать тайну.


8

Моя проблема заключалась в том, что я пытался изменить изображение в другой теме. Я сделал это так:

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

Звоните с:

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

2
Да, это укусило меня ... снова ... Можно также использоватьdispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex

7

Если вы хотите, чтобы изображение было установлено UIImageViewпрограммно, не забывайте добавлять его UIImageView как SubView к основному View.

А также не забыл установить ImageView Frame .

вот код

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

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

[self.view addSubview:myImage];

7

Не забудьте позвонить sizeToFit()после изменения изображения, если вы затем используете размер UIImageView для установки UIScrollView contentSize и / или вычисления масштаба увеличения

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


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

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

Это то же самое, чтобы представить изображение по фону UIView или по свойству изображения UIImageView?
voromax

2

На этот вопрос уже было много ответов. К сожалению, никто не работал для меня. Итак, ради завершенности добавлю, что мне помогло:

У меня было несколько изображений с одним именем - поэтому я заказал их в подпапках. И у меня был полный путь к файлу изображения, который я хотел показать. С полным путемimageNamed: (как используется во всех решениях выше) не работал и был неправильный метод.

Вместо этого я теперь использую imageWithContentsOfFile:вот так:

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

Не знаю, если кто-нибудь читает это далеко?

Если это так, и этот помог вам: пожалуйста, проголосуйте. ;-)


1

Работать со Swift 5 (XCode 10.3) это просто

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

0

Чтобы установить изображение в вашем imageView используйте строку кода ниже,

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

скопируйте изображение в свой проект, а затем используйте приведенный выше код
Вайбхав Шиледар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.