Görüntüyü programlı olarak Xcode 6.1 / Swift ile UIImageView olarak ayarlayın


87

UIImageView'ı programlı olarak Xcode 6.1'de ayarlamaya çalışıyorum:

@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)

Ancak Xcode, bgImage = UIImageView(image: image) Görüntü ile "beklenen bildirim" diyor "afternoon"ve benim anladığım kadarıyla PNG'nin XCode 6.1'de bir uzantıya ihtiyacı yok.

Ayrıca sadece denedim bgImage.image = UIImage(named: "afternoon"), ancak yine de elde edin:

görüntü açıklamasını buraya girin

GÜNCELLEME

Tamam, güncellemek için kod koyduk UIImageViewiçine viewDidLoadfonksiyonu, ama UIImageViewyine de (afternoon.png olarak baz dizininde bulunuyorsa) görüntü gösterilmiyor:

@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
Bu kodu bir fonksiyona koymanız gerekiyor. ViewDidLoad () 'a koyardım.
HAS

1
Bunu bir çıkış olarak ilan ettiğinizden beri, yeniden başlatmak yerine sadece görüntüyü atamayı denediniz mi? bgImage = UIImageView(image: image)sadece kullanmak yerine bgImage.image = UIImage(named: "afternoon")?
c_rath

1
Güncellenmiş
OP'ye

Yanıtlar:


159

BgImage'inizi bir IBOutlet olarak atadığınız ve bağladığınız için, onu bir UIImageView olarak başlatmanıza gerek yoktur ... bunun yerine tek yapmanız gereken image özelliğini gibi ayarlamaktır bgImage.image = UIImage(named: "afternoon"). Bu kodu çalıştırdıktan sonra, priz kullanılarak zaten atanmış olduğu için görüntü iyi görünüyordu.

görüntü açıklamasını buraya girin

Ancak, bir çıkış değilse ve onu bir storyboard / xib dosyasındaki bir UIImageView nesnesine zaten bağlamadıysanız, o zaman aşağıdakine benzer bir şey yapabilirsiniz ...

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

Xcode 8'de doğrudan seçim penceresinden görüntü seçebilirsiniz (YENİ) ...

  • Sadece - "resim" yazmanız yeterlidir ve bir öneri kutusu alırsınız ve sonra listeden - "Görüntü Edebiyatı" öğesini seçersiniz (ekli resme bakın) ve

  • daha sonra kareye dokunun,
    görüntü varlıklarınızdaki tüm görüntüleri ( ekli ikinci resme bakın) görebileceksiniz ... veya oradan başka bir görüntü seçin.

görüntü açıklamasını buraya girin

  • Şimdi kare kutuya dokunun - (Yukarıdaki seçeneği seçtikten sonra bu kare kutuyu göreceksiniz)

görüntü açıklamasını buraya girin


4
Vay canına, bir IDE'de ilk kez böyle bir şey görmek, şimdi
kodumda

Yardım arkadaşın için teşekkürler. Kendine dikkat et kanka.
thesamoanppprogrammer

11

Tamam, bununla çalıştırıldı (UIImageView programını programlı olarak oluşturma):

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

Buna ne dersin;

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

burada image_1, image_1 olarak varlıklar klasöründe bulunur. png .

Bir görüntü slaydını görüntülemek için anahtar kutusu kullandığım için bu benim için çalıştı.


5

Bu kod yanlış yerde:

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

Bunu bir işlevin içine yerleştirmelisiniz. viewDidLoadFonksiyonun içine taşımanızı tavsiye ederim .

Genel olarak, bir işlevin içinde olmayan sınıf içinde ekleyebileceğiniz tek kod, aşağıdaki gibi değişken bildirimleridir:

@IBOutlet weak var bgImage: UIImageView!


2

Hızlı sözdizimi ile bu benim için çalıştı:

    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

Swift 4'te görüntü sıfır olarak döndürülürse.

Sağ taraftaki resme tıklayın (Yardımcı Programlar) -> Hedef Üyeliği Kontrol Edin


2

Sorunuzda gösterdiğiniz şekilde yapmak istiyorsanız, bu, bunu satır içi yapmanın bir yoludur.

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

Sadece bir sürükleyip bırakmanız ImageView, çıkış eylemini oluşturmanız, bağlamanız ve bir resim sağlamanız gerekir (Xcode, assetsverdiğiniz ad için klasörünüze bakacaktır (burada: "toronto"))

İçinde yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imgView.image = UIImage(named: "toronto")
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.