Programowo ustaw obraz na UIImageView z Xcode 6,1 / Swift

86

Próbuję programowo ustawić UIImageView w 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)

Ale Xcode mówi, że „oczekiwana deklaracja” z bgImage = UIImageView(image: image) Image "afternoon"to PNG, a według mnie PNG nie potrzebuje rozszerzenia w XCode 6.1.

Próbowałem też tylko bgImage.image = UIImage(named: "afternoon"), ale nadal otrzymuję:

wprowadź opis obrazu tutaj

AKTUALIZACJA

OK, umieściłem kod do aktualizacji UIImageVieww viewDidLoadfunkcji, ale UIImageViewnadal nie wyświetla obrazu (który istnieje w katalogu podstawowym jako popołudnie.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)
}
IlludiumPu36
źródło
2
Musisz umieścić ten kod w funkcji. Umieściłbym to w viewDidLoad ().
MA
1
Odkąd zadeklarowałeś to jako gniazdko, czy próbowałeś po prostu przypisać obraz zamiast ponownie go inicjalizować? zamiast po bgImage = UIImageView(image: image)prostu używać bgImage.image = UIImage(named: "afternoon")?
c_rath
1
Zobacz zaktualizowany OP ... Bardzo nowy w XCode ... bardzo dobrze zaznajomiony z JavaScript, jQuery, PHP itp.
IlludiumPu36

Odpowiedzi:

159

Ponieważ masz przypisany i połączony plik bgImage jako IBOutlet, nie ma potrzeby inicjowania go jako UIImageView ... zamiast tego wszystko, co musisz zrobić, to ustawić właściwość image, taką jak bgImage.image = UIImage(named: "afternoon"). Po uruchomieniu tego kodu obraz wyglądał dobrze, ponieważ został już przypisany za pomocą gniazdka.

wprowadź opis obrazu tutaj

Jeśli jednak nie było to gniazdko i nie masz go już podłączonego do obiektu UIImageView w pliku storyboard / xib, możesz coś takiego jak następujące ...

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!)
    }
}
c_rath
źródło
49

W xcode 8 możesz bezpośrednio wybrać obraz z okna wyboru (NOWOŚĆ) ...

  • Wystarczy wpisać - "obraz", a pojawi się okienko z sugestiami, a następnie wybierz z listy - "Literał obrazka" (patrz na załączonym obrazku) i

  • następnie dotknij kwadratu, aby zobaczyć wszystkie obrazy (patrz
    drugi załączony obraz), które znajdują się w zasobach graficznych ... lub wybierz stamtąd inny obraz.

wprowadź opis obrazu tutaj

  • Teraz dotknij kwadratowego pola - (zobaczysz to kwadratowe pole po wybraniu powyższej opcji)

wprowadź opis obrazu tutaj

Vijay Sharma
źródło
4
Wow, pierwszy raz widząc coś takiego w IDE, wygląda teraz całkiem fajnie w moim kodzie
Big_Chair
Dzięki za pomoc. Uważaj kolego.
thesamoanppprogrammer
11

OK, działało z tym (programowe tworzenie UIImageView):

var imageViewObject :UIImageView

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

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

self.view.addSubview(imageViewObject)

self.view.sendSubviewToBack(imageViewObject)
IlludiumPu36
źródło
9

Co powiesz na to;

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

gdzie obraz_1 znajduje się w folderze zasobów jako obraz_1. png .

To zadziałało dla mnie, ponieważ używam obudowy przełącznika do wyświetlania slajdu obrazu.

dnaatwork.com
źródło
5

Ten kod jest w złym miejscu:

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

Musisz umieścić go wewnątrz funkcji. Zalecam przeniesienie go wewnątrz viewDidLoadfunkcji.

Ogólnie rzecz biorąc, jedynym kodem, który można dodać w klasie, który nie znajduje się wewnątrz funkcji, są deklaracje zmiennych, takie jak:

@IBOutlet weak var bgImage: UIImageView!
Alfie Hanssen
źródło
1
.. dzięki za pomoc, ale UIImageView nadal nie wyświetla obrazu ... zobacz zaktualizowany OP
IlludiumPu36.
2

Dzięki szybkiej składni zadziałało to dla mnie:

    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
KOTIOS
źródło
2

W Swift 4, jeśli obraz jest zwracany jako zero.

Kliknij obraz po prawej stronie (Narzędzia) -> Sprawdź członkostwo docelowe

YaBoiSandeep
źródło
2

Jeśli chcesz to zrobić tak, jak pokazałeś w swoim pytaniu, możesz to zrobić bezpośrednio

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
}
AnBisw
źródło
2

Wystarczy przeciągnąć i upuścić ImageView, utworzyć akcję outlet, połączyć ją i dostarczyć obraz (Xcode będzie szukał w assetsfolderze podanej przez Ciebie nazwy (tutaj: „toronto”))

W yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imgView.image = UIImage(named: "toronto")
    }
}

źródło