Comment créer une vue UIImage par programme - Swift


107

J'essaie de créer une vue UIImage par programme, j'ai une nouvelle vue et j'ai essayé de le faire

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

cela n'a pas fonctionné parce que je ne sais pas ce que cela devrait être votre opinion dans la deuxième ligne.

Question: Comment faire apparaître une UIImageView à l'écran en la codant au lieu de la faire dans le storyboard


7
Sans rapport avec votre question actuelle, mais, BTW, soyez prévenu si cette image n'est pas celle que vous aurez besoin d'utiliser beaucoup, vous ne voudrez peut-être pas l'utiliser UIImage(named:...). Comme le dit la documentation: "Si vous avez un fichier image qui ne sera affiché qu'une seule fois et que vous souhaitez vous assurer qu'il ne sera pas ajouté au cache du système, vous devez plutôt créer votre image en utilisant UIImage(contentsOfFile:...). Cela gardera votre image à usage unique hors du cache d'image système, améliorant potentiellement les caractéristiques d'utilisation de la mémoire de votre application. " Juste un FYI.
Rob

Réponses:


255

Commencez par créer un à UIImagepartir de votre fichier image, puis créez un à UIImageViewpartir de celui-ci:

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

Enfin, vous devrez donner imageViewun cadre et l'ajouter à votre vue pour qu'il soit visible:

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

39

Créez d'abord UIImageView, puis ajoutez une image dans UIImageView.

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

32

Cette réponse est mise à jour vers Swift 3.

C'est ainsi que vous pouvez ajouter une vue d'image par programme où vous pouvez contrôler les contraintes.

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

Vous pouvez utiliser ci-dessus sur une seule ligne.

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

2
Vous pouvez, mais ce n'est pas exactement "propre" Swift
Alec O

12

Dans 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
taille et échelle?
Martian2049

1
Sous-noté pour trop de lignes de code. Ce serait mieux de l' écrire comme ceci: let imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView). 2 lignes et vous utilisez une constante au lieu d'une variable. Ensuite, utilisez Autoconstraint pour le placer.
kakubei

10

Merci, MEnnabah, juste pour ajouter à votre code où il vous manque le =signe dans la déclaration de déclaration:

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

Tout le reste est parfait pour Swift 3.


6

Dans Swift 4.2 et 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
    }
}

Cette réponse fonctionne pour Swift 4.2. Pour quelqu'un comme un novice, l'extension peut ajouter de la confusion à la compréhension du code même si c'est toujours agréable à avoir.
midtownguru

-2

Swift 4:

Créez d'abord une prise pour votre UIImageView

@IBOutlet var infoImage: UIImageView!

Ensuite, utilisez la propriété image dans UIImageView

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

Dans swift 4.2 "inopinément trouvé nul lors du déballage facultatif" une erreur a été lancée à partir de la deuxième ligne.
midtownguru
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.