我在应用中实现了以下代码,以允许用户将图像添加到应用中。但是,永远不会要求用户访问照片的权限。我在这里缺少什么?
在我的info.plist中我设置了: 隐私 - 照片库使用说明=请提供对照片库的访问
包标识符是: $(PRODUCT_BUNDLE_IDENTIFIER)
import UIKit
class NewPostXIB: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var image: UIImageView!
let imagePicker = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
self.view.endEditing(true)
}
@IBAction func closeButton(_ sender: Any) {
dismiss(animated: false, completion: nil)
}
@IBAction func addImageButton(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
imagePicker.allowsEditing = true
imagePicker.sourceType = .photoLibrary
present(imagePicker, animated: true, completion: nil)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
image.contentMode = .scaleAspectFill
image.image = pickedImage
}
dismiss(animated: false, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
答案 0 :(得分:3)
添加以下功能解决了问题:
func checkPermission() {
let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
switch photoAuthorizationStatus {
case .authorized:
present(imagePicker, animated: true, completion: nil)
print("Access is granted by user")
case .notDetermined:
PHPhotoLibrary.requestAuthorization({
(newStatus) in
print("status is \(newStatus)")
if newStatus == PHAuthorizationStatus.authorized {
/* do stuff here */
self.present(self.imagePicker, animated: true, completion: nil)
print("success")
}
})
print("It is not determined until now")
case .restricted:
// same same
print("User do not have access to photo album.")
case .denied:
// same same
print("User has denied the permission.")
}
}
答案 1 :(得分:2)
答案 2 :(得分:0)
答案很简单:这是从iOS 11开始的正常行为,因为UIImagePickerController
在单独的进程中运行,因此对于只读访问权限,您不需要任何特殊权限。