简体   繁体   中英

UIImage not displaying using Swift

Code written in Swift for displaying UIImages works in the iOS 8.0 simulator but not on a phone running IOS 7.0 for some reason.

let image1 = UIImage(named: "img1")
let imageview = UIImageView(image: image1)
self.view.addSubview(imageview)

let image2 = UIImage(named: "img2")
let button = UIButton(frame: CGRect(origin: CGPoint(x: 0, y: 100), size: image2.size)
button.setImage(image2, forState: UIControlState.Normal)
self.view.addSubview(button)

The images are in the right place with the right size and valid references, they're just not being displayed, except on the simulator running iOS 8.

Is this a problem for anyone else?

EDIT: Deleting from Images.xcassets, cleaning the project and copying the files into the bundle itself seems to work for me.

Inorder to display images you have to change the code in following way

let image1 = UIImage(named: "img1.jpg")
let imageview = UIImageView(image: image1)
self.view.addSubview(imageview)

let image2 = UIImage(named: "img2.jpg")
let button = UIButton(frame: CGRect(origin: CGPoint(x: 0, y: 100), size: image2.size)
button.setImage(image2, forState: UIControlState.Normal)
self.view.addSubview(button)

Remember swift is not supporting .png format images, It is supporting .jpg format.

I tried your code in iOS 8-Simulator and on my iOS 7 device and it did what it should do. So no, in my case I don't see a problem.

I changed img1 to img1.JPG (name of file) and img2 to img2.png. And I copied the images directly into the folder where the view controller is..

There seems to be a disconnect between the votes for the question and the other answers, so I will add a generic answer for how to display an image in Swift. That is what originally brought me here anyway.

How to display an image in Swift

Use UIImage to get a reference to the image in the main bundle.

let image = UIImage(named: "rocket.png")
imageView.image = image

Notes

  • imageView is a UIImageView
  • In my tests, including or excluding the .png file extension did not make a different. It might be necessary to include if you are using multiple image formats, though.
  • Also in my tests, it did not make a difference whether the image was directly added to the project or was in Assets.xcassets.
  • If you need an image that is not in the main bundle, see this question .
  • According to the edit in the original question here, deleting the image and re-adding it to the bundle is what solved the problem.

You would check if the image was added to your framework, if that is unchecked you are not able to load the resource, but if you check it, the image will be loaded在此处输入图片说明

I stored my images in the " Images.xcassets" folder and my images didn't appear on my device but they did appear on the simulator. In order to display the "Images.xcassets" images on my device (iPhone 5), I, the solution that worked for me was to copy bundle resources for the "Images.xcassets" folder

To Copy Bundle Resources: Select Target>Build Phases>Copy Bundle Resources>Select "+" (Add Items)>Select "Images.xcassets

Swift 5:

The accepted answer no longer compiles for various reasons, so here is my updated version:

    let image1 = UIImage(named: "img1.jpg")
    if let myImage1 = image1 {
        let imageview = UIImageView(image: myImage1)
        self.view.addSubview(imageview)
    } else {
        print ("img1 not loaded")
    }

    let image2 = UIImage(named: "img2.jpg")

    if let myImage2 = image2 {
        let button = UIButton(frame: CGRect(origin: CGPoint(x: 0, y: 100), size: myImage2.size))
        button.setImage(myImage2, for: .normal)
        self.view.addSubview(button)
    } else {
        print ("img2 not loaded")
    }

One possible reason is height. Check the height of UIImageView, might be higher in code or in storyboard.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM