J. Doe
J. Doe

Reputation: 285

UIImageView won't display chosen image from UIImagePicker

My imageView doesn't display the picture I choose with the UIImagePicker.

Here's all the code for it:

@IBAction func addImage(_ sender: Any) {
    if !didShowCamera {
        imagePicker = UIImagePickerController()
        imagePicker.delegate = self

        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            imagePicker.sourceType = .camera
            imagePicker.cameraCaptureMode = .photo
        } else {
            imagePicker.sourceType = .photoLibrary
        }

        self.present(imagePicker, animated: true, completion: nil)
    }
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
    print(image)
    self.jobImage.image = takenImage
    self.takenImage = image
    didShowCamera = true
    self.dismiss(animated: true, completion: nil)
}

Any ideas how to solve it?

Upvotes: 0

Views: 197

Answers (3)

Sagar koyani
Sagar koyani

Reputation: 431

Replace

let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage

with

let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage

And check whether you have add privacy-photo library access in info.plist.

See detailed at [https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html#//apple_ref/doc/uid/TP40015214-CH6-SW1][1]

Upvotes: 0

Bappaditya
Bappaditya

Reputation: 9642

I guess the takenImage is nil while assigning to image view, you need to assign image to takenImage before setting to the image view. please update the method like,

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
    print(image)
    self.takenImage = image
    self.jobImage.image = takenImage
    didShowCamera = true
    self.dismiss(animated: true, completion: nil)
}

Upvotes: 0

Kathiresan Murugan
Kathiresan Murugan

Reputation: 2962

Use dispatch main queue

DispatchQueue.main.async {
self.jobImage.image = takenImage
self.takenImage = image
}

Upvotes: 2

Related Questions