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ę:
AKTUALIZACJA
OK, umieściłem kod do aktualizacji UIImageView
w viewDidLoad
funkcji, ale UIImageView
nadal 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)
}
bgImage = UIImageView(image: image)
prostu używaćbgImage.image = UIImage(named: "afternoon")
?Odpowiedzi:
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.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!) } }
źródło
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.
źródło
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)
źródło
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.
źródło
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
viewDidLoad
funkcji.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!
źródło
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
źródło
W Swift 4, jeśli obraz jest zwracany jako zero.
Kliknij obraz po prawej stronie (Narzędzia) -> Sprawdź członkostwo docelowe
źródło
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 }
źródło
Wystarczy przeciągnąć i upuścić
ImageView
, utworzyć akcję outlet, połączyć ją i dostarczyć obraz (Xcode będzie szukał wassets
folderze 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