¿Cómo se crea una vista de UIImage mediante programación? Swift

107

Estoy tratando de crear una vista UIImage mediante programación, tengo una nueva vista e intenté hacer esto

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

esto no funciona, porque no sé lo que esto debe ser YourView en la segunda línea.

Pregunta: ¿Cómo hago para que aparezca un UIImageView en la pantalla codificándolo en lugar de hacerlo en el guión gráfico?

alex
fuente
7
No está relacionado con su pregunta en cuestión, pero, por cierto, tenga cuidado si esta imagen no es una que necesite usar mucho, es posible que no desee usar UIImage(named:...). Como dicen los documentos: "Si tiene un archivo de imagen que solo se mostrará una vez y desea asegurarse de que no se agregue a la caché del sistema, debe crear su imagen utilizando UIImage(contentsOfFile:...). Esto mantendrá su imagen de un solo uso fuera de la memoria caché de imágenes del sistema, lo que podría mejorar las características de uso de la memoria de su aplicación ". Solo un FYI.
Rob

Respuestas:

255

Primero crea un UIImagedesde su archivo de imagen, luego crea un a UIImageViewpartir de eso:

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

Finalmente, deberá darle imageViewun marco y agregarle su vista para que sea visible:

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

Primero cree UIImageView y luego agregue la imagen en UIImageView.

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

Esta respuesta se actualiza a Swift 3.

Así es como puede agregar una vista de imagen mediante programación donde puede controlar las restricciones.

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
    }

}
MEnnabah
fuente
16

Puede usar arriba en una línea.

  let imageView = UIImageView(image: UIImage(named: "yourImage.png")!)
Vikram Pote
fuente
2
Puedes, pero no es exactamente "limpio" Swift
Alec O
12

En 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)
Sandeep Singh
fuente
1
tamaño y escala?
Martian2049
1
Votado menos por demasiadas líneas de código. Sería mejor escribir así: let imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView). 2 líneas y usa una constante en lugar de una variable. Luego use Autoconstraint para colocarlo.
kakubei
10

Gracias, MEnnabah, solo para agregar a su código donde falta el =signo en la declaración de declaración:

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 lo demás es perfecto para Swift 3.

Poder completo
fuente
6

En Swift 4.2 y 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
    }
}
iOS
fuente
Esta respuesta funciona para Swift 4.2. Para alguien como un novato, la extensión puede agregar confusión a la comprensión del código, aunque todavía es bueno tenerla.
midtownguru
-2

Rápido 4:

Primero cree una salida para su UIImageView

@IBOutlet var infoImage: UIImageView!

Luego use la propiedad de la imagen en UIImageView

infoImage.image = UIImage(named: "icons8-info-white")
Joel
fuente
En swift 4.2 "inesperadamente encontrado nulo al desenvolver opcional", se arrojó un error desde la segunda línea.
midtownguru