Adrian
Adrian

Reputation: 20058

How to access photos from actual device using UIImagePickerController

Currently I am using this code:

@IBAction func selectPicture(sender: UIButton) {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary){
        var imag = UIImagePickerController()
        imag.delegate = self
        imag.sourceType = .Camera;
        imag.mediaTypes = [kUTTypeImage as String]
        imag.allowsEditing = false
        imag.modalPresentationStyle = .Popover
        self.presentViewController(imag, animated: true, completion: nil)
    }
}

But when I run it on the iPad of iPhone device it asks me only for the camera permission and I don't have the possibility to choose a photo from any album/camera roll.

What can I do so I can access the photos from the device ?

Upvotes: 0

Views: 761

Answers (1)

Midhun MP
Midhun MP

Reputation: 107121

You are setting the wrong sourceType:

imag.sourceType = .Camera;

Change that to:

imag.sourceType = .SavedPhotosAlbum;

or

imag.sourceType = .PhotoLibrary

The constants are defined in UIImagePickerControllerSourceType Enumeration and the definition is like:

UIImagePickerControllerSourceType

The source to use when picking an image or when determining available media types. Declaration

Swift

enum UIImagePickerControllerSourceType : Int
{
    case PhotoLibrary
    case Camera
    case SavedPhotosAlbum
}

Constants

PhotoLibrary

Specifies the device’s photo library as the source for the image picker controller.

Camera

Specifies the device’s built-in camera as the source for the image picker controller. Indicate the specific camera you want (front or rear, as available) by using the cameraDevice property.

SavedPhotosAlbum

Specifies the device’s Camera Roll album as the source for the image picker controller. If the device does not have a camera, specifies the Saved Photos album as the source.

Discussion

A given source may not be available on a given device because the source is not physically present or because it cannot currently be accessed.

Upvotes: 1

Related Questions