Setel gambar secara terprogram ke UIImageView dengan Xcode 6.1 / Swift


87

Saya mencoba mengatur UIImageView secara terprogram di 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)

Tapi Xcode mengatakan "deklarasi yang diharapkan" dengan bgImage = UIImageView(image: image) Gambar "afternoon"adalah PNG, dan pemahaman saya adalah PNG tidak memerlukan ekstensi di XCode 6.1.

Juga mencoba bgImage.image = UIImage(named: "afternoon"), tetapi tetap mendapatkan:

masukkan deskripsi gambar di sini

MEMPERBARUI

Oke, saya telah memasukkan kode untuk memperbarui UIImageViewke dalam viewDidLoadfungsi, tetapi UIImageViewmasih belum menampilkan gambar (yang ada di direktori dasar sebagai sore.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
Anda perlu memasukkan kode itu ke dalam sebuah fungsi. Saya akan menaruhnya di viewDidLoad ().
HAS

1
Karena Anda menyatakannya sebagai outlet, apakah Anda sudah mencoba menetapkan gambar alih-alih menginisialisasi ulang? daripada bgImage = UIImageView(image: image)hanya menggunakan bgImage.image = UIImage(named: "afternoon")?
c_rath

1
Lihat OP yang diperbarui ... Sangat baru untuk XCode ... sangat akrab dengan JavaScript, jQuery, PHP dll
IlludiumPu36

Jawaban:


159

Karena Anda telah menetapkan bgImage dan ditautkan sebagai IBOutlet, Anda tidak perlu menginisialisasinya sebagai UIImageView ... sebagai gantinya, yang perlu Anda lakukan hanyalah menyetel properti gambar seperti bgImage.image = UIImage(named: "afternoon"). Setelah menjalankan kode ini, gambar tampak baik-baik saja karena sudah ditetapkan menggunakan outlet.

masukkan deskripsi gambar di sini

Namun, jika itu bukan outlet dan Anda belum memilikinya terhubung ke objek UIImageView pada file storyboard / xib, maka Anda bisa melakukan sesuatu seperti berikut ...

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

Di xcode 8 Anda dapat langsung memilih gambar dari jendela pemilihan (BARU) ...

  • Anda hanya perlu mengetik - "gambar" dan Anda akan mendapatkan kotak saran lalu pilih - "Literal Gambar" dari daftar (lihat di gambar terlampir) dan

  • kemudian ketuk pada kotak Anda akan dapat melihat semua gambar (lihat di
    gambar terlampir kedua) yang ada di aset gambar Anda ... atau pilih gambar lain dari sana.

masukkan deskripsi gambar di sini

  • Sekarang ketuk kotak persegi - (Anda akan melihat kotak persegi itu setelah memilih opsi di atas)

masukkan deskripsi gambar di sini


4
Wow, pertama kali melihat sesuatu seperti itu di IDE, terlihat keren di kode saya sekarang
Big_Chair

Terima kasih atas bantuannya sobat. Jaga teman.
thesamoanppprogrammer

11

Oke, membuatnya berfungsi dengan ini (membuat UIImageView secara terprogram):

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

Bagaimana dengan ini;

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

di mana gambar_1 berada dalam folder aset sebagai gambar_1. png .

Ini berhasil untuk saya karena saya menggunakan sakelar untuk menampilkan slide gambar.


5

Kode ini ada di tempat yang salah:

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

Anda harus menempatkannya di dalam suatu fungsi. Saya sarankan untuk memindahkannya ke dalam viewDidLoadfungsi.

Secara umum, satu-satunya kode yang dapat Anda tambahkan di dalam kelas yang tidak berada di dalam fungsi adalah deklarasi variabel seperti:

@IBOutlet weak var bgImage: UIImageView!

1
..terima kasih atas bantuan Anda, tetapi UIImageView masih belum menampilkan gambar ... lihat OP
IlludiumPu36 yang

2

Dengan sintaks cepat, ini berfungsi untuk saya:

    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

Di Swift 4, jika gambar dikembalikan sebagai nihil.

Klik pada gambar, di sisi kanan (Utilities) -> Periksa Keanggotaan Target


2

Jika Anda ingin melakukannya seperti yang Anda tunjukkan dalam pertanyaan Anda, ini adalah cara untuk melakukannya secara inline

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

Anda hanya perlu menyeret dan melepas ImageView, membuat tindakan outlet, menautkannya, dan memberikan gambar (Xcode akan mencari assetsnama yang Anda berikan di folder Anda (di sini: "toronto"))

Di yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imgView.image = UIImage(named: "toronto")
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.