Программно установить изображение в UIImageView с помощью Xcode 6.1 / Swift


86

Я пытаюсь программно установить UIImageView в 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)

Но Xcode говорит, что «ожидаемое объявление» с bgImage = UIImageView(image: image) Image "afternoon"- это PNG, и я понимаю, что PNG не нуждается в расширении в XCode 6.1.

Тоже пробовал только что bgImage.image = UIImage(named: "afternoon"), но все равно получаю:

введите описание изображения здесь

ОБНОВИТЬ

Хорошо, я поместил код для обновления UIImageViewв viewDidLoadфункцию, но UIImageViewвсе еще не показывает изображение (которое существует в базовом каталоге как day.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
Вам нужно поместить этот код в функцию. Я бы поместил это в viewDidLoad ().
ИМЕЕТ

1
Поскольку вы объявили его как розетку, пробовали ли вы просто назначить изображение вместо его повторной инициализации? вместо того, чтобы bgImage = UIImageView(image: image)просто использовать bgImage.image = UIImage(named: "afternoon")?
c_rath

1
См. Обновленный OP ... Очень новичок в XCode ... очень знаком с JavaScript, jQuery, PHP и т. Д.
IlludiumPu36

Ответы:


159

Поскольку ваш bgImage назначен и связан как IBOutlet, нет необходимости инициализировать его как UIImageView ... вместо этого все, что вам нужно сделать, это установить свойство изображения, например bgImage.image = UIImage(named: "afternoon"). После запуска этого кода изображение выглядело нормально, так как оно уже было назначено с помощью розетки.

введите описание изображения здесь

Однако, если это не розетка, и она еще не подключена к объекту UIImageView в файле раскадровки / xib, тогда вы могли бы сделать что-то вроде следующего ...

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

49

В xcode 8 вы можете напрямую выбрать изображение из окна выбора (НОВИНКА) ...

  • Вам просто нужно ввести - «изображение», и вы получите окно предложения, затем выберите - «Литерал изображения» из списка (см. Прикрепленное изображение) и

  • затем нажмите на квадрат, чтобы увидеть все изображения (см.
    второе прикрепленное изображение), которые есть в ваших изображениях ... или выберите другое изображение оттуда.

введите описание изображения здесь

  • Теперь нажмите на квадратную рамку - (Вы увидите эту квадратную рамку после выбора опции выше)

введите описание изображения здесь


4
Вау, впервые вижу что-то подобное в среде IDE, теперь в моем коде выглядит довольно круто
Big_Chair

Спасибо за помощь, приятель. Береги товарища.
thesamoanppprogrammer

11

Хорошо, он работал с этим (программно создавая 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)

9

Как насчет этого;

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

где изображение_1 находится в папке с ресурсами как изображение_1. png .

Это сработало для меня, так как я использую корпус переключателя для отображения слайда изображения.


5

Этот код находится не в том месте:

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

Вы должны поместить его внутри функции. Рекомендую переместить внутрь viewDidLoadфункции.

В общем, единственный код, который вы можете добавить в класс, который не входит в функцию, - это объявления переменных, например:

@IBOutlet weak var bgImage: UIImageView!

1
..спасибо за помощь, но UIImageView все еще не показывает изображение ... см. обновленный OP
IlludiumPu36

2

С быстрым синтаксисом это сработало для меня:

    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, если изображение возвращается как nil.

Нажмите на изображение с правой стороны (Утилиты) -> Проверить целевое членство


2

Если вы хотите сделать это так, как вы указали в своем вопросе, это способ сделать это встроенным

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

Вам просто нужно перетащить ImageView, создать действие выхода, связать его и предоставить изображение (Xcode будет искать в вашемassets папке указанное вами имя (здесь: «торонто»))

В yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        imgView.image = UIImage(named: "toronto")
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.