首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装相机还是用PhotoLibrary装UIImagePickerController?

装相机还是用PhotoLibrary装UIImagePickerController?
EN

Stack Overflow用户
提问于 2016-10-13 02:55:29
回答 1查看 660关注 0票数 0

最近,我在iOS 10上的Swift 3中添加了一些代码,可以在Swift 3中拍摄一张照片,或者选择一张照片。当我调用打开的相机或照片库时,我的应用程序会以"Thread 14: signal SIGABRT“的方式崩溃,而没有其他迹象显示正在发生什么。对我来说,据我所调试,这是否发生在试图加载本机相机视图或照片库时。任何帮助都将不胜感激!

代码如下:

代码语言:javascript
复制
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
}
*/

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 03:22:16

您必须从Info.plist 10开始在iOS中添加一个键

代码语言:javascript
复制
<key>NSPhotoLibraryUsageDescription</key>
<string>Use Photos</string>

有关更多详细信息,请查看此链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40011536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档