使用UIImagePickerController加载相机或PhotoLibrary? [英] Load Camera or PhotoLibrary with UIImagePickerController?

查看:113
本文介绍了使用UIImagePickerController加载相机或PhotoLibrary?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近在iOS 10的Swift 3中放入代码来拍照或选择图片。调用开放的相机或照片库时,我的应用程序崩溃,显示 Thread 14:signal SIGABRT,没有其他指示正在发生的事情。对我来说,根据我的调试,是在尝试加载本机相机视图或照片库时发生的。任何帮助将不胜感激!

I have recently put in code to either take a picture, or select a picture, in Swift 3 on iOS 10. When calling either open camera or photo library, my app crashes with a "Thread 14: signal SIGABRT" with no other indication of what's happening. To me, and from what I've debugged, is this happens when trying to load the native camera view or photo library. Any help would be much appreciated!

以下代码:

class CameraViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

@IBOutlet weak var imageView: UIImageView!


var imagePicker = UIImagePickerController()

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}


@IBAction func BTN_takePhoto(_ sender: AnyObject) {

    print("button pressed")

    if (UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)){

        print("source available")
        //imagePicker =  UIImagePickerController()
        print(1)
        imagePicker.delegate = self
        print(2)
        imagePicker.sourceType = UIImagePickerControllerSourceType.camera
        print(3)
        imagePicker.mediaTypes = [kUTTypeImage as String]
        print(4)
        imagePicker.allowsEditing = true
        print(5)
        self.present(imagePicker, animated: true, completion: nil)
        print(6)
    }
    else {
        print("ERROR: source not available")
        NSLog("No Camera")
        let alert = UIAlertController(title: "No camera", message: "Please allow this app the use of your camera in settings or buy a device that has a camera.", preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}

@IBAction func BTN_pickFromLibrary(_ sender: AnyObject) {

    imagePicker.allowsEditing = false //2
    imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary //3
    present(imagePicker, animated: true, completion: nil)//4


}


func imagePickerController(imagePicker: UIImagePickerController, didFinishPickingMediaWithInfo info: NSDictionary!) {
    NSLog("Received image from camera")
    let mediaType = info[UIImagePickerControllerMediaType] as! String
    var originalImage:UIImage?, editedImage:UIImage?, imageToSave:UIImage?
    let compResult:CFComparisonResult = CFStringCompare(mediaType as NSString!, kUTTypeImage, CFStringCompareFlags.compareCaseInsensitive)
    if ( compResult == CFComparisonResult.compareEqualTo ) {

        editedImage = info[UIImagePickerControllerEditedImage] as! UIImage?
        originalImage = info[UIImagePickerControllerOriginalImage] as! UIImage?

        if ( editedImage != nil ) {
            imageToSave = editedImage
        } else {
            imageToSave = originalImage
        }
        imageView.image = imageToSave
        imageView.reloadInputViews()
    }
    imagePicker.dismiss(animated: true, completion: nil)
}

func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    imagePicker.dismiss(animated: true, completion: nil)
}


/*
private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    imagePicker.dismiss(animated: true, completion: nil)
    imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
}
*/

}

推荐答案

您必须立即从iOS 10开始在Info.plist中添加密钥

You have to add a key in Info.plist now from iOS 10 onwards

<key>NSPhotoLibraryUsageDescription</key>
<string>Use Photos</string>

检查此链接了解详情

这篇关于使用UIImagePickerController加载相机或PhotoLibrary?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆