Imposta l'immagine a livello di codice su UIImageView con Xcode 6.1 / Swift


87

Sto cercando di impostare UIImageView a livello di codice in 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)

Ma Xcode sta dicendo che "la dichiarazione prevista" con bgImage = UIImageView(image: image) Image "afternoon"è un PNG, e la mia comprensione è che PNG non ha bisogno di un'estensione in XCode 6.1.

Ho anche provato solo bgImage.image = UIImage(named: "afternoon"), ma ottieni ancora:

inserisci qui la descrizione dell'immagine

AGGIORNARE

OK, ho inserito il codice per l'aggiornamento UIImageViewnella viewDidLoadfunzione, ma UIImageViewnon mostra ancora l'immagine (che esiste nella directory di base come pomeriggio.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
Devi inserire quel codice in una funzione. Lo metterei in viewDidLoad ().
HA

1
Dato che l'hai dichiarato come presa, hai provato semplicemente ad assegnare l'immagine invece di reinizializzarla? invece di bgImage = UIImageView(image: image)usare solo bgImage.image = UIImage(named: "afternoon")?
c_rath

1
Vedi OP aggiornato ... Molto nuovo per XCode ... molto familiare con JavaScript, jQuery, PHP ecc.
IlludiumPu36

Risposte:


159

Poiché hai la tua bgImage assegnata e collegata come IBOutlet, non è necessario inizializzarla come UIImageView ... invece tutto ciò che devi fare è impostare la proprietà dell'immagine come bgImage.image = UIImage(named: "afternoon"). Dopo aver eseguito questo codice, l'immagine sembrava a posto poiché era già stata assegnata tramite la presa.

inserisci qui la descrizione dell'immagine

Tuttavia, se non era una presa e non l'avevi già connesso a un oggetto UIImageView su un file storyboard / xib, allora potresti fare qualcosa di simile al seguente ...

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

50

In xcode 8 puoi scegliere direttamente l'immagine dalla finestra di selezione (NUOVO) ...

  • Devi solo digitare - "immagine" e otterrai una casella di suggerimento, quindi seleziona - "Immagine letterale" dall'elenco (vedi nell'immagine allegata) e

  • quindi tocca il quadrato potrai vedere tutte le immagini (vedi nella
    seconda immagine allegata) che sono nelle tue risorse immagine ... o seleziona un'altra immagine da lì.

inserisci qui la descrizione dell'immagine

  • Ora tocca la casella quadrata - (Vedrai quella casella quadrata dopo aver selezionato l'opzione sopra)

inserisci qui la descrizione dell'immagine


4
Wow, la prima volta che vedo qualcosa del genere in un IDE, sembra piuttosto interessante nel mio codice ora
Big_Chair

Grazie per l'aiuto amico. Abbi cura di te amico.
thesamoanppprogrammer

11

OK, ho funzionato con questo (creazione di UIImageView a livello di programmazione):

var imageViewObject :UIImageView

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

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

self.view.addSubview(imageViewObject)

self.view.sendSubviewToBack(imageViewObject)

10

Cosa ne pensi di questo;

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

dove image_1 si trova all'interno della cartella degli asset come immagine_1. png .

Questo ha funzionato per me dato che sto usando un interruttore per visualizzare una diapositiva di immagini.


5

Questo codice è nel posto sbagliato:

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

Devi inserirlo in una funzione. Consiglio di spostarlo all'interno della viewDidLoadfunzione.

In generale, l'unico codice che puoi aggiungere all'interno della classe che non è all'interno di una funzione sono le dichiarazioni di variabili come:

@IBOutlet weak var bgImage: UIImageView!

1
..grazie per il vostro aiuto, ma UIImageView non mostra ancora l'immagine ... vedi OP aggiornato
IlludiumPu36

2

Con una sintassi rapida questo ha funzionato per me:

    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

In Swift 4, se l'immagine viene restituita come nulla.

Fare clic sull'immagine, sul lato destro (Utilità) -> Verifica appartenenza target


2

Se vuoi farlo nel modo in cui hai mostrato nella tua domanda, questo è un modo per farlo in linea

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

Devi solo trascinare e rilasciare un ImageView, creare l'azione presa, collegarlo e fornire un'immagine (Xcode cercherà nella tua assetscartella il nome che hai fornito (qui: "toronto"))

In yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

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