【问题标题】:UIImagePickerController working without NS Photo Library and Camera descriptionsUIImagePickerController 在没有 NS 照片库和相机描述的情况下工作
【发布时间】:2018-01-24 01:13:10
【问题描述】:

我正在使用 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.
}

}

Storyboard View

plist image

【问题讨论】:

    标签: ios xcode8 uiimagepickercontroller swift4


    【解决方案1】:

    为什么应用程序不通过 NS 使用声明请求权限

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

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

    当然,如果您希望此应用在 iOS 10 及之前的版本上运行,您仍然需要用户授权。

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 2015-09-19
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2016-05-08
      相关资源
      最近更新 更多