glv19
glv19

Reputation: 486

UIImagePickerController Live Photo

I'm trying to display a UIImagePickerController that allows users to select either a UIImage or a PHLivePhoto.

import Photos

var imagePicker = UIImagePickerController()

if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {

     imagePicker.delegate = self
     imagePicker.sourceType = .savedPhotosAlbum

     imagePicker.mediaTypes = ["kUTTypeImage","kUTTypeLivePhoto"]
}

When displaying the view controller, I get the following error:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'No available types for source 2'

Upvotes: 0

Views: 2163

Answers (2)

shan
shan

Reputation: 134

 var imag:UIImagePickerController?

     print("Camera")
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){
            print("Button capture")
            self.imag = UIImagePickerController()
            self.imag!.delegate = self
            self.imag!.sourceType = UIImagePickerControllerSourceType.Camera
            self.imag!.cameraDevice = UIImagePickerControllerCameraDevice.Front
            self.imag!.mediaTypes = [kUTTypeImage as String]
            self.imag!.allowsEditing = false
            self.presentViewController(self.imag!, animated: true, completion: nil)
        }

        print("Gallery")
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary){
            print("Button capture")
            self.imag = UIImagePickerController()
            self.imag!.delegate = self
            self.imag!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary;
            //imag.mediaTypes = [kUTTypeImage];
            self.imag!.allowsEditing = false
            self.presentViewController(self.imag!, animated: true, completion: nil)
        }

  func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
   }

Upvotes: 0

nishith Singh
nishith Singh

Reputation: 2988

So kUTTypeLivePhoto is only available from ios 9.1 and above so you should probably consider putting a version check. Also if you

import MobileCoreServices

you can use kUTTypeLivePhoto and kUTTypeImage directly.

if #available(iOS 9.1, *) {
    picker.mediaTypes = [kUTTypeLivePhoto as String, kUTTypeImage as String
} else {
    picker.mediaTypes = [kUTTypeImage as String];
};

Hope this helps.

Upvotes: 2

Related Questions