Программно установить изображение для UIImageView с Xcode 6.1/Swift - программирование
Подтвердить что ты не робот

Программно установить изображение для UIImageView с Xcode 6.1/Swift

Я пытаюсь установить 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) Изображение "afternoon" - это PNG, и я понимаю, что PNG не нуждается в расширении в XCode 6.1.

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

enter image description here

ОБНОВИТЬ

Хорошо, я поместил код для обновления UIImageView в функцию viewDidLoad, но UIImageView по-прежнему не показывает изображение (которое существует в базовом каталоге как днем UIImageView):

@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)
}
4b9b3361

Ответ 1

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

enter image description here

Однако, если он не был выходом и у вас не было его уже подключено к объекту 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!)
    }
}

Ответ 2

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

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

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

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

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

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

Ответ 3

ОК, он работает с этим (создавая 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)

Ответ 4

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

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

где image_1 находится в папке с ресурсами как image_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!

Ответ 6

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

    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

Ответ 7

В Swift 4, если изображение возвращается как ноль.

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

Ответ 8

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

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
}

Ответ 9

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

В yourProject/ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imgView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

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