Definir imagem programaticamente para UIImageView com Xcode 6.1 / Swift

86

Estou tentando definir UIImageView programaticamente no Xcode 6.1:

@IBOutlet weak var bgImage: UIImageView!

var image : UIImage = UIImage(named:"afternoon")!
bgImage = UIImageView(image: image)
bgImage.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.addSubview(bgImage)

Mas o Xcode está dizendo que a "declaração esperada" com a bgImage = UIImageView(image: image) imagem "afternoon"é um PNG, e meu entendimento é que o PNG não precisa de uma extensão no XCode 6.1.

Também tentei apenas bgImage.image = UIImage(named: "afternoon"), mas ainda consigo:

insira a descrição da imagem aqui

ATUALIZAR

OK, coloquei o código a ser atualizado UIImageViewna viewDidLoadfunção, mas UIImageViewainda não está exibindo a imagem (que existe no diretório base comoternoon.png):

@IBOutlet weak var bgImage: UIImageView!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    updateTime()
    var timer = NSTimer()
    let aSelector : Selector = "updateTime"
    timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)

    var image : UIImage = UIImage(named:"afternoon")!
    bgImage = UIImageView(image: image)
}
IlludiumPu36
fonte
2
Você precisa colocar esse código em uma função. Eu colocaria em viewDidLoad ().
TEM
1
Já que você o declarou como uma saída, tentou simplesmente atribuir a imagem em vez de reinicializá-la? em vez de bgImage = UIImageView(image: image)apenas usar bgImage.image = UIImage(named: "afternoon")?
c_rath de
1
Veja o OP atualizado ... Muito novo no XCode ... muito familiarizado com JavaScript, jQuery, PHP etc
IlludiumPu36

Respostas:

159

Já que você tem seu bgImage atribuído e vinculado como um IBOutlet, não há necessidade de inicializá-lo como um UIImageView ... em vez disso, tudo que você precisa fazer é definir a propriedade da imagem como bgImage.image = UIImage(named: "afternoon"). Depois de executar este código, a imagem parecia bem, pois já estava atribuída usando o outlet.

insira a descrição da imagem aqui

No entanto, se não fosse um outlet e você ainda não o tivesse conectado a um objeto UIImageView em um arquivo storyboard / xib, você poderia fazer algo como o seguinte ...

class ViewController: UIViewController {
    var bgImage: UIImageView?

    override func viewDidLoad() {
        super.viewDidLoad()

        var image: UIImage = UIImage(named: "afternoon")!
        bgImage = UIImageView(image: image)
        bgImage!.frame = CGRectMake(0,0,100,200)
        self.view.addSubview(bgImage!)
    }
}
c_rath
fonte
49

No xcode 8 você pode escolher diretamente a imagem da janela de seleção (NOVA) ...

  • Você só precisa digitar - "imagem" e você receberá uma caixa de sugestões, em seguida, selecione - "Literal de imagem" na lista (veja na imagem em anexo) e

  • em seguida, toque no quadrado para ver todas as imagens (veja na
    segunda foto em anexo) que estão em seus ativos de imagem ... ou selecione outra imagem de lá.

insira a descrição da imagem aqui

  • Agora toque na caixa quadrada - (você verá aquela caixa quadrada após selecionar a opção acima)

insira a descrição da imagem aqui

Vijay Sharma
fonte
4
Uau, pela primeira vez vendo algo assim em um IDE, parece muito legal no meu código agora
Big_Chair
Obrigado pela ajuda amigo. Tome cuidado, companheiro.
thesamoanppprogrammer
11

OK, comecei a trabalhar com isto (criando o UIImageView programaticamente):

var imageViewObject :UIImageView

imageViewObject = UIImageView(frame:CGRectMake(0, 0, 600, 600))

imageViewObject.image = UIImage(named:"afternoon")

self.view.addSubview(imageViewObject)

self.view.sendSubviewToBack(imageViewObject)
IlludiumPu36
fonte
9

Que tal agora;

myImageView.image=UIImage(named: "image_1")

onde image_1 está dentro da pasta de ativos como image_1. png .

Isso funcionou para mim, pois estou usando uma caixa de interruptor para exibir um slide de imagem.

dnaatwork.com
fonte
5

Este código está no lugar errado:

var image : UIImage = UIImage(named:"afternoon")!
bgImage = UIImageView(image: image)
bgImage.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.addSubview(bgImage)

Você deve colocá-lo dentro de uma função. Eu recomendo movê-lo dentro da viewDidLoadfunção.

Em geral, o único código que você pode adicionar dentro da classe que não está dentro de uma função são declarações de variáveis ​​como:

@IBOutlet weak var bgImage: UIImageView!
Alfie Hanssen
fonte
1
.. obrigado por sua ajuda, mas UIImageView ainda não está mostrando a imagem ... veja OP atualizado
IlludiumPu36
2

Com a sintaxe rápida, isso funcionou para mim:

    let leftImageView = UIImageView()
    leftImageView.image = UIImage(named: "email")

    let leftView = UIView()
    leftView.addSubview(leftImageView)

    leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
    leftImageView.frame = CGRect(x: 10, y: 10, width: 20, height: 20)
    userNameTextField.leftViewMode = .always
    userNameTextField.leftView = leftView
KOTIOS
fonte
2

No Swift 4, se a imagem for retornada como nulo.

Clique na imagem, no lado direito (Utilitários) -> Check Target Membership

YaBoiSandeep
fonte
2

Se você quiser fazer da maneira que mostrou em sua pergunta, esta é uma maneira de fazê-lo inline

class YourClass: UIViewController{

  @IBOutlet weak var tableView: UITableView!
  //other IBOutlets

  //THIS is how you declare a UIImageView inline
  let placeholderImage : UIImageView = {
        let placeholderImage = UIImageView(image: UIImage(named: "nophoto"))
        placeholderImage.contentMode = .scaleAspectFill
        return placeholderImage
    }()

   var someVariable: String!
   var someOtherVariable: Int!

   func someMethod(){
      //method code
   }

   //and so on
}
AnBisw
fonte
2

Você só precisa arrastar e soltar um ImageView, criar a ação de saída, vinculá-lo e fornecer uma imagem (o Xcode vai olhar em seuassets pasta o nome que você forneceu (aqui: "toronto"))

No yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imgView.image = UIImage(named: "toronto")
    }
}

fonte