Como você cria um UIImage View programaticamente - Swift


107

Estou tentando criar um UIImage View programaticamente, tenho um novo modo de exibição e tentei fazer isso

let imageName = "yourImage.png"
yourview.backgroundColor = UIColor.colorWithPatternImage(UIImage(named:imageName))

isso não funcionou porque não sei qual deveria ser a sua visão na segunda linha.

Pergunta: Como faço para que um UIImageView apareça na tela codificando-o em vez de fazê-lo no storyboard


7
Não relacionado à sua pergunta em questão, mas, BTW, esteja avisado se esta imagem não for uma que você precise usar muito, você pode não querer usar UIImage(named:...). Como dizem os documentos: "Se você tem um arquivo de imagem que será exibido apenas uma vez e deseja garantir que ele não seja adicionado ao cache do sistema, você deve criar sua imagem usando UIImage(contentsOfFile:...). Isso manterá sua imagem de uso único fora do cache de imagem do sistema, melhorando potencialmente as características de uso de memória de seu aplicativo. " Apenas um FYI.
Rob

Respostas:


255

Primeiro você cria um a UIImagepartir do seu arquivo de imagem e, em seguida, cria um a UIImageViewpartir desse:

let imageName = "yourImage.png"
let image = UIImage(named: imageName)
let imageView = UIImageView(image: image!)

Por fim, você precisará fornecer imageViewum quadro e adicioná-lo à sua visualização para que fique visível:

imageView.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.addSubview(imageView)

39

Primeiro crie UIImageView e depois adicione uma imagem em UIImageView.

    var imageView : UIImageView
    imageView  = UIImageView(frame:CGRectMake(10, 50, 100, 300));
    imageView.image = UIImage(named:"image.jpg")
    self.view.addSubview(imageView)

31

Esta resposta é atualização para Swift 3.

É assim que você pode adicionar uma visualização de imagem programaticamente, onde pode controlar as restrições.

Class ViewController: UIViewController {

    let someImageView: UIImageView = {
       let theImageView = UIImageView()
       theImageView.image = UIImage(named: "yourImage.png")
       theImageView.translatesAutoresizingMaskIntoConstraints = false //You need to call this property so the image is added to your view
       return theImageView
    }()

    override func viewDidLoad() {
       super.viewDidLoad()

       view.addSubview(someImageView) //This add it the view controller without constraints
       someImageViewConstraints() //This function is outside the viewDidLoad function that controls the constraints
    }

    // do not forget the `.isActive = true` after every constraint
    func someImageViewConstraints() {
        someImageView.widthAnchor.constraint(equalToConstant: 180).isActive = true
        someImageView.heightAnchor.constraint(equalToConstant: 180).isActive = true
        someImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        someImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 28).isActive = true
    }

}

16

Você pode usar o acima em uma linha.

  let imageView = UIImageView(image: UIImage(named: "yourImage.png")!)

2
Você pode, mas não é exatamente "limpo" Swift
Alec O

12

Em Swift 3.0:

var imageView : UIImageView
    imageView  = UIImageView(frame:CGRect(x:10, y:50, width:100, height:300));
    imageView.image = UIImage(named:"Test.jpeg")
    self.view.addSubview(imageView)

1
tamanho e escala?
Martian2049,

1
Undervoted para muitas linhas de código. Seria melhor para escrevê-lo como este: let imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView). 2 linhas e você usa uma constante em vez de uma variável. Em seguida, use o Autoconstraint para colocá-lo.
kakubei

10

Obrigado, MEnnabah, apenas para adicionar ao seu código onde está faltando o =sinal na declaração de declaração:

let someImageView: UIImageView = {
   let theImageView = UIImageView()
   theImageView.image = UIImage(named: "yourImage.png")
   theImageView.translatesAutoresizingMaskIntoConstraints = false //You need to call this property so the image is added to your view
   return theImageView
}()

Todo o resto é perfeito para o Swift 3.


6

Em Swift 4.2 e Xcode 10.1

//Create image view simply like this.
let imgView = UIImageView()
imgView.frame = CGRect(x: 200, y: 200, width: 200, height: 200)
imgView.image = UIImage(named: "yourimagename")//Assign image to ImageView
imgView.imgViewCorners()
view.addSubview(imgView)//Add image to our view

//Add image view properties like this(This is one of the way to add properties).  
extension UIImageView {
    //If you want only round corners
    func imgViewCorners() {
        layer.cornerRadius = 10
        layer.borderWidth = 1.0
        layer.masksToBounds = true
    }
}

Esta resposta funciona para o Swift 4.2. Para alguém como um novato, a extensão pode adicionar confusão ao entendimento do código, embora ainda seja bom ter.
midtownguru de

-2

Swift 4:

Primeiro crie uma saída para o seu UIImageView

@IBOutlet var infoImage: UIImageView!

Em seguida, use a propriedade da imagem em UIImageView

infoImage.image = UIImage(named: "icons8-info-white")

No swift 4.2, o erro "inesperadamente encontrado nulo ao desembrulhar opcional" foi lançado a partir da segunda linha.
midtownguru de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.