Как программно изменить изображение, отображаемое в UIImageView? - PullRequest
132 голосов
/ 01 апреля 2009

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

Ответы [ 14 ]

185 голосов
/ 01 апреля 2009

Если у вас уже есть 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, а затем добавить переходы.

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

37 голосов
/ 22 августа 2010

Обратите внимание, что файл 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 голосов
/ 07 июня 2010

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

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

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

23 голосов
/ 24 апреля 2013
imageView.image = [UIImage imageNamed:@"myImage.png"];
16 голосов
/ 15 июля 2010

Чтобы люди, которые могут прибегнуть к этому, попытались решить их проблему, не забудьте правильно объявить свойство в вашем заголовочном файле и синтезировать 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]];
14 голосов
/ 13 марта 2015

Пример в 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 голосов
/ 06 июля 2009

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

 [imageView setHidden: NO];

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

[mainView addSubview: imageView];

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

[mainView bringSubviewToFront: imageView];

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

7 голосов
/ 07 июня 2012

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

И также не забыли установить Рамка ImageView .

вот код

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

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

[self.view addSubview:myImage];
7 голосов
/ 30 ноября 2011

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

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

Позвонить по номеру:

[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
6 голосов
/ 01 апреля 2016

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

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...