Wie erstelle ich programmgesteuert eine UIImage-Ansicht - Swift

106

Ich versuche, eine UIImage-Ansicht programmgesteuert zu erstellen. Ich habe eine neue Ansicht und habe dies versucht

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

Das hat nicht funktioniert, weil ich nicht weiß, wie das in der zweiten Zeile aussehen soll .

Frage: Wie kann ich eine UIImageView auf dem Bildschirm anzeigen lassen, indem ich sie codiere, anstatt sie im Storyboard auszuführen?

Alex
quelle
7
Sie haben nichts mit Ihrer Frage zu tun, aber seien Sie gewarnt, wenn Sie dieses Bild nicht häufig verwenden müssen, möchten Sie es möglicherweise nicht verwenden UIImage(named:...). In den Dokumenten heißt es: "Wenn Sie eine Bilddatei haben, die nur einmal angezeigt wird, und sicherstellen möchten, dass sie nicht zum Cache des Systems hinzugefügt wird, sollten Sie stattdessen Ihr Bild mit erstellen UIImage(contentsOfFile:...). Dadurch wird Ihr Einwegbild ferngehalten." des System-Image-Cache, wodurch möglicherweise die Speichernutzungseigenschaften Ihrer App verbessert werden. " Nur zu Ihrer Information.
Rob

Antworten:

254

Zuerst erstellen Sie eine UIImageaus Ihrer Bilddatei, dann erstellen Sie eine UIImageViewdaraus:

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

Schließlich müssen Sie imageVieweinen Rahmen angeben und ihn Ihrer Ansicht hinzufügen, damit er sichtbar ist:

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

Erstellen Sie zuerst UIImageView und fügen Sie dann ein Bild in UIImageView hinzu.

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

Diese Antwort ist ein Update auf Swift 3.

Auf diese Weise können Sie programmgesteuert eine Bildansicht hinzufügen, in der Sie die Einschränkungen steuern können.

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
quelle
16

Sie können oben in einer Zeile verwenden.

  let imageView = UIImageView(image: UIImage(named: "yourImage.png")!)
Vikram Pote
quelle
2
Sie können, aber es ist nicht gerade "sauber" 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)
Sandeep Singh
quelle
1
Größe und Maßstab?
Martian2049
1
Für zu viele Codezeilen unterbewertet. Wäre besser, es so zu schreiben : let imageView = UIImageView(named: "Test.jpeg"); self.view.addSubview(imageView). 2 Zeilen und Sie verwenden eine Konstante anstelle einer Variablen. Verwenden Sie dann Autoconstraint, um es zu platzieren.
Kakubei
10

Vielen Dank, MEnnabah, nur um Ihren Code zu ergänzen, bei dem das =Zeichen in der Deklarationserklärung fehlt :

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

Alles andere ist perfekt für Swift 3.

Volle Kraft
quelle
6

In Swift 4.2 und 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
quelle
Diese Antwort funktioniert für Swift 4.2. Für jemanden wie einen Anfänger kann eine Erweiterung das Verständnis des Codes verwirren, obwohl es immer noch schön ist, sie zu haben.
Midtownguru
-2

Swift 4:

Erstellen Sie zunächst eine Steckdose für Ihr UIImageView

@IBOutlet var infoImage: UIImageView!

Verwenden Sie dann die Bildeigenschaft in UIImageView

infoImage.image = UIImage(named: "icons8-info-white")
Joel
quelle
In Swift 4.2 wurde in der zweiten Zeile der Fehler "Unerwartet beim Auspacken optional" gefunden.
Midtownguru