UIImagePicker控制器在没有NS照片库和相机描述的情况下工作



我正在使用UIImagePickerController,因为我正在创建一个应用程序,允许通过照片库和相机发布图像。我创建了一个基本的演示,其中包括一个UIImageView,UIButton和一些代码来设置UIImagePickerController。此外,我还在 Xcode 的 plist 部分设置了 (NSPhotoLibraryUsageDescription 和 NSCameraUsageDescription(。 图像选择功能运行良好,但当我运行模拟器时,没有人询问我是否应该让应用程序允许访问我的相机或照片库。 然后,我尝试关闭 plist 语句并再次运行。 如果没有这些,应用程序应该崩溃,但它不会。 我的问题是我在这里做错了什么,让选择器在没有 plist 的情况下工作,为什么应用程序不要求 NS 使用语句的权限?

import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var imageView: UIImageView!

@IBAction func importImage(_ sender: UIButton) {
    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    let actionSheet = UIAlertController(title: "Add Your Profile Picture", message: "Choose An Option", preferredStyle: . actionSheet)
    actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action:UIAlertAction) in
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            imagePickerController.sourceType = .camera
            self.present(imagePickerController, animated: true, completion: nil)
        }
        else {
            print("Camera not Available")
        }
    }))
    actionSheet.addAction(UIAlertAction(title: "Camera Roll", style: .default, handler:{ (action:UIAlertAction) in imagePickerController.sourceType = .photoLibrary
        self.present(imagePickerController, animated: true, completion: nil)
    }))
    actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil
    ))
    self.present(actionSheet, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    imageView.image = image
    picker.dismiss(animated: true, completion: nil)
}

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


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

情节提要视图

plist图像

为什么应用不要求使用 NS 使用率语句的权限

这是由于iOS 11的变化。您不再需要用户授权,仅仅通过UIImagePickerController接收UIImage。

但是,如果您想要更深入的信息,即访问作为PHAsset及其元数据的图像,则确实需要用户授权。

当然,如果您希望此应用程序在iOS 10及之前运行,则仍然需要用户授权。

最新更新