Définir l'image par programme sur UIImageView avec Xcode 6.1 / Swift


86

J'essaie de définir UIImageView par programme dans 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)

Mais Xcode dit que "la déclaration attendue" avec bgImage = UIImageView(image: image) Image "afternoon"est un PNG, et je crois comprendre que PNG n'a pas besoin d'une extension dans XCode 6.1.

Également essayé juste bgImage.image = UIImage(named: "afternoon"), mais toujours:

entrez la description de l'image ici

MISE À JOUR

OK, j'ai mis le code à mettre à jour UIImageViewdans la viewDidLoadfonction, mais je UIImageViewne montre toujours pas l'image (qui existe dans le répertoire de base en tant qu'après-midi.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)
}

2
Vous devez mettre ce code dans une fonction. Je le mettrais dans viewDidLoad ().
A

1
Depuis que vous l'avez déclaré comme une prise, avez-vous essayé d'attribuer simplement l'image au lieu de la réinitialiser? au lieu de bgImage = UIImageView(image: image)simplement utiliser bgImage.image = UIImage(named: "afternoon")?
c_rath

1
Voir OP mis à jour ... Très nouveau pour XCode ... très familier avec JavaScript, jQuery, PHP etc
IlludiumPu36

Réponses:


159

Étant donné que votre bgImage est attribuée et liée en tant qu'IBOutlet, il n'est pas nécessaire de l'initialiser en tant que UIImageView ... à la place, tout ce que vous avez à faire est de définir la propriété d'image comme bgImage.image = UIImage(named: "afternoon"). Après avoir exécuté ce code, l'image semblait correcte car elle était déjà attribuée à l'aide de la prise.

entrez la description de l'image ici

Cependant, si ce n'était pas une prise et que vous ne l'aviez pas déjà connecté à un objet UIImageView sur un fichier storyboard / xib, vous pourriez alors quelque chose comme ce qui suit ...

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

49

Dans xcode 8, vous pouvez directement choisir l'image dans la fenêtre de sélection (NOUVEAU) ...

  • Il vous suffit de taper - "image" et vous obtiendrez une boîte de suggestion, puis sélectionnez - "Image Literal" dans la liste (voir l'image ci-jointe) et

  • puis appuyez sur le carré, vous pourrez voir toutes les images (voir dans la
    deuxième image ci-jointe) qui sont dans vos actifs d'image ... ou sélectionnez une autre image à partir de là.

entrez la description de l'image ici

  • Maintenant, appuyez sur la boîte carrée - (Vous verrez cette boîte carrée après avoir sélectionné l'option ci-dessus)

entrez la description de l'image ici


4
Wow, la première fois que je vois quelque chose comme ça dans un IDE, ça a l'air plutôt cool dans mon code maintenant
Big_Chair

Merci pour votre aide. Prends soin de toi mon pote.
thesamoanppprogrammer

11

OK, je l'ai fait fonctionner avec ceci (création de UIImageView par programme):

var imageViewObject :UIImageView

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

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

self.view.addSubview(imageViewObject)

self.view.sendSubviewToBack(imageViewObject)

9

Que dis-tu de ça;

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

où image_1 se trouve dans le dossier des éléments en tant que image_1. png .

Cela a fonctionné pour moi puisque j'utilise un boîtier d'interrupteur pour afficher une diapositive d'image.


5

Ce code est au mauvais endroit:

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

Vous devez le placer dans une fonction. Je recommande de le déplacer dans la viewDidLoadfonction.

En général, le seul code que vous pouvez ajouter dans la classe qui ne soit pas à l'intérieur d'une fonction sont des déclarations de variables telles que:

@IBOutlet weak var bgImage: UIImageView!

1
..merci pour votre aide, mais UIImageView n'affiche toujours pas l'image ... voir OP mis à jour
IlludiumPu36

2

Avec une syntaxe rapide, cela a fonctionné pour moi:

    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

2

Dans Swift 4, si l'image est renvoyée comme nulle.

Cliquez sur l'image, sur le côté droit (Utilitaires) -> Vérifier l'adhésion cible


2

Si vous voulez le faire comme vous l'avez montré dans votre question, c'est une façon de le faire en ligne

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
}

2

Il vous suffit de faire glisser et déposer un ImageView, de créer l'action de sortie, de le lier et de fournir une image (Xcode va chercher dans votre assetsdossier le nom que vous avez fourni (ici: "toronto"))

Dans yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imgView.image = UIImage(named: "toronto")
    }
}
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.