Come si crea una vista UIImage a livello di programmazione - Swift


107

Sto cercando di creare una vista UIImage a livello di programmazione, ho una nuova vista e ho provato a farlo

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

questo non ha funzionato perché non so quale dovrebbe essere la tua opinione nella seconda riga.

Domanda: come faccio a far apparire un UIImageView sullo schermo codificandolo invece di farlo nello storyboard


7
Non correlato alla tua domanda a portata di mano, ma, BTW, tieni presente che se questa immagine non è quella che dovrai usare molto, potresti non voler usare UIImage(named:...). Come dicono i documenti: "Se hai un file immagine che verrà visualizzato solo una volta e desideri assicurarti che non venga aggiunto alla cache del sistema, dovresti invece creare la tua immagine usando UIImage(contentsOfFile:...). Ciò manterrà la tua immagine monouso della cache dell'immagine di sistema, migliorando potenzialmente le caratteristiche di utilizzo della memoria della tua app. " Solo un FYI.
Rob

Risposte:


255

Per prima cosa crei un UIImagedal tuo file immagine, quindi crea un UIImageViewda quello:

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

Infine dovrai dare imageViewuna cornice e aggiungerla alla tua vista affinché sia ​​visibile:

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

39

Prima crea UIImageView quindi aggiungi l'immagine in UIImageView.

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

31

Questa risposta è l'aggiornamento a Swift 3.

In questo modo è possibile aggiungere una visualizzazione immagine a livello di codice in cui è possibile controllare i vincoli.

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

Puoi usare sopra in una riga.

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

2
Puoi, ma non è esattamente "pulito" Swift
Alec O

12

In 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
dimensioni e scala?
Martian 2049

1
Undervotato per troppe righe di codice. Sarebbe meglio scrivere in questo modo: let imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView). 2 righe e usi una costante invece di una variabile. Quindi utilizzare Autoconstraint per posizionarlo.
kakubei

10

Grazie, MEnnabah, solo per aggiungere al tuo codice dove manca il =segno nella dichiarazione di dichiarazione:

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

Tutto il resto è perfetto per Swift 3.


6

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

Questa risposta funziona per Swift 4.2. Per qualcuno come un principiante, l'estensione potrebbe aggiungere confusione alla comprensione del codice anche se è comunque piacevole da avere.
midtownguru

-2

Swift 4:

Per prima cosa crea una presa per il tuo UIImageView

@IBOutlet var infoImage: UIImageView!

Quindi usa la proprietà image in UIImageView

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

In swift 4.2 l'errore "trovato inaspettatamente nullo durante lo scartamento opzionale" è stato lanciato dalla seconda riga.
midtownguru
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.