Como posso alterar a imagem exibida em um UIImageView programaticamente?

134

Eu tenho um IBOutleta UIImageView, mas quando olho para o UIImageViewdocumento, não consigo ver nenhuma dica sobre como alterá-lo programaticamente. Preciso buscar um UIImageobjeto disso UIImageView?

obrigado
fonte

Respostas:

185

Se você já possui um IBOutlet para um UIImageView, basta capturar uma imagem e chamar setImage no receptor (UIImageView). Dois exemplos de captura de uma imagem estão abaixo. Um da Web e um adicionado à sua pasta Recursos no Xcode.

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

ou

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

Depois de ter uma imagem, você pode definir o UIImageView:

[imageView setImage:image];

A linha acima assume que o imageView é o seu IBOutlet.

É isso aí! Se você quiser se divertir, pode adicionar a imagem a um UIView e adicionar transições.

Gerenciamento de memória PS não incluído.

Jordânia
fonte
1
obrigado, mas não funciona :( removi a imagem no construtor de interface para que o UIImageView esteja vazio. então implementei isso no método viewDidLoad. Mas nada acontece. O nome da imagem está 100% correto especificado. . à tomada alguma coisa que eu posso tentar?
Graças
3
Você provavelmente não conectou o IBOutlet à referência do ViewController no IB. Verifique se a imagem está na pasta Recursos.
Jordânia
Não tenho certeza das regras / impacto necro no SO, mas sei que isso me ajudou a resolver meu problema. Estou usando o iOS v5.1, xcode 4.3.2
Jake
1
Verifique se [UIViewController viewDidLoad] é chamado antes de alterar a imagem. Eu fiquei preso por isso. 8)
poGUIst
1
Adicionando a esta solução, se você estiver usando o Image Asset Catalog, basta especificar o nome do seu conjunto de imagens, por exemplo, UIImage * image = [UIImage imageNamed: @ "My Icon"]; em vez de UIImage * image = [UIImage imageNamed: @ "myicon.png"];
Keith OYS
37

Observe que o arquivo NIB não liga todos os IBOutlets até que a visualização seja adicionada à cena. Se você estiver conectando as coisas manualmente (o que você pode fazer se houver NIBs separados), é importante ter isso em mente.

Portanto, se meu controlador de exibição de teste tiver um "imageView" conectado por uma ponta, isso provavelmente não funcionará:

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

Mas isso irá:

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

Isso funcionou para mim

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

Verifique se o ImageView está declarado corretamente no arquivo .h e está vinculado ao elemento IB.

Gilall
fonte
23
imageView.image = [UIImage imageNamed:@"myImage.png"];
Lukas Wiklund
fonte
16

Para o objetivo de pessoas que pesquisam isso no Google para resolver o problema, lembre-se de declarar adequadamente a propriedade no arquivo de cabeçalho e sintetizar o UIImageView no arquivo de implementação ... Será difícil definir a imagem programaticamente sem métodos getter e setter.

#import <UIKit/UIKit.h>

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

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

@end

e depois no seu .m:

@implementation YOURCONTROLLERNAME

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

A partir daí, você deve usar algo como o seguinte para definir sua imagem.

[YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];
swiecki
fonte
Obrigado! Sendo novo no xcode e iphones em geral, estava faltando o YOURCONTROLLER antes do imageToDisplay.
Opy
15

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

}
O rei da bruxaria
fonte
9

Seguindo o conselho de Jordan (que deve funcionar realmente), tente definir o UIImageView como visível:

 [imageView setHidden: NO];

e também - não esqueça de anexá-lo ao UIView principal:

[mainView addSubview: imageView];

e trazer para a frente:

[mainView bringSubviewToFront: imageView];

A esperança de combinar todas essas etapas o ajudará a resolver o mistério.

Adi
fonte
8

Meu problema foi que tentei alterar a imagem em outro segmento. Eu fiz assim:

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

Ligue para:

[self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
Okku
fonte
2
Sim, isso me mordeu ... novamente ... Pode igualmente utilizardispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
Dex
7

Se você deseja definir a imagem como UIImageViewprogramaticamente, não esqueça de adicionar UIImageView como SubView à tela principal.

E também não se esqueça de definir o ImageView Frame .

aqui está o código

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

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

[self.view addSubview:myImage];
Rajneesh071
fonte
7

Não se esqueça de ligar sizeToFit()depois de alterar a imagem, se você usar o tamanho de UIImageView para definir o conteúdo do UIScrollViewSize e / ou calcular a escala de zoom

let image = UIImage(named: "testImage")
imageView.image = image
imageView.sizeToFit()
scrollView.contentSize = imageView.bounds.size
Miroslav Hrivik
fonte
5
myUIImageview.image = UIImage (named:"myImage.png")
Helton Wernik
fonte
1
Sinalizado como qualidade muito baixa. Por favor, melhore.
Tirou
Você pode fazer isso expandindo-o.
Rohit Gupta
2
UIColor * background = [[UIColor alloc] initWithPatternImage:
    [UIImage imageNamed:@"anImage.png"]];

self.view.backgroundColor = background;
[background release];
Percepção
fonte
É o mesmo para apresentar a imagem pelo plano de fundo do UIView ou pela propriedade de imagem do UIImageView?
Voromax 28/05
2

Esta pergunta já tinha muitas respostas. Infelizmente, nenhum funcionou para mim. Então, para completar, adiciono o que me ajudou:

Eu tinha várias imagens com o mesmo nome - então as encomendei em subpastas. E eu tinha o caminho completo para o arquivo de imagem que queria mostrar. Com um caminho completo imageNamed:(como usado em todas as soluções acima) não funcionou e foi o método errado.

Em vez disso, agora uso imageWithContentsOfFile:assim:

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

Não sei, se alguém lê tão longe?

Se sim, e este ajudou: por favor vote. ;-)

DerWOK
fonte
1

Trabalhar com o Swift 5 (XCode 10.3) é apenas

yourImageView.image = UIImage(named: "nameOfTheImage")
bytepunch
fonte
0

Para definir a imagem em sua imagem, use a linha de código abaixo,

self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];                         
Vaibhav Shiledar
fonte
Copie a imagem no seu projeto e, em seguida, usar o código acima
Vaibhav Shiledar