使用 Xcode 6.1/Swift 编程将图像设置为 UIImageView

我试图在 Xcode 6.1中以编程方式设置 UIImageView:

@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仍然没有显示图像(在基本目录中的下午.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)
}
310871 次浏览

This code is in the wrong place:

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

You must place it inside a function. I recommend moving it inside the viewDidLoad function.

In general, the only code you can add within the class that's not inside of a function are variable declarations like:

@IBOutlet weak var bgImage: UIImageView!

OK, got it working with this (creating the UIImageView programmatically):

var imageViewObject :UIImageView


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


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


self.view.addSubview(imageViewObject)


self.view.sendSubviewToBack(imageViewObject)

Since you have your bgImage assigned and linked as an IBOutlet, there is no need to initialize it as a UIImageView... instead all you need to do is set the image property like bgImage.image = UIImage(named: "afternoon"). After running this code, the image appeared fine since it was already assigned using the outlet.

enter image description here

However, if it wasn't an outlet and you didn't have it already connected to a UIImageView object on a storyboard/xib file, then you could so something like the following...

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

How about this;

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

where image_1 is within the assets folder as image_1.png.

This worked for me since i'm using a switch case to display an image slide.

In xcode 8 you can directly choose image from the selection window (NEW)...

  • You just need to type - "image" and you will get a suggestion box then select -"Image Literal" from list (see in attached picture) and

  • then tap on the square you will be able to see all images(see in
    second attached picture) which are in your image assets... or select other image from there.

enter image description here

  • Now tap on square box - (You will see that square box after selecting above option)

enter image description here

With swift syntax this worked for me :

    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

In Swift 4, if the image is returned as nil.

Click on image, on the right hand side (Utilities) -> Check Target Membership

If you want to do it the way you showed in your question, this is a way to do it inline

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
}

You just need to drag and drop an ImageView, create the outlet action, link it, and provide an image (Xcode is going to look in your assets folder for the name you provided (here: "toronto"))

In yourProject/ViewController.swift

import UIKit


class ViewController: UIViewController {


@IBOutlet weak var imgView: UIImageView!


override func viewDidLoad() {
super.viewDidLoad()


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