¿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?


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)

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)

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
    }

}

16

Puede usar arriba en una línea.

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

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)

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.


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
    }
}

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")

En swift 4.2 "inesperadamente encontrado nulo al desenvolver opcional", se arrojó un error desde la segunda línea.
midtownguru
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.