ios - 我无法在 UIViewController 中访问相机
问题描述
我真的希望我没有重复 - 但我在这里阅读了大量不同的相机问题并实施了他们所有的答案,结果相同:没有任何反应!
没有错误,应用程序没有崩溃,没有任何问题 - 只是没有相机的迹象,应该被激活!我的目标是在 viewDidAppear 或 viewDidLoad 中激活它,但我也尝试通过将代码连接到按钮来测试它——结果相同;没有什么。在我自己的设备和模拟器上:什么都没有!
我在这个简单的代码中做错了什么?- 或者我需要更改哪个设置?我试过玩“数据保护”:什么都没有!
代码:
class CreateNewPerson: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func viewDidAppear () {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}
private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]!) {
PersonPhoto.image = info[UIImagePickerControllerOriginalImage] as? UIImage
dismiss(animated: true, completion: nil)
}
希望可以有人帮帮我!
info.plist 的照片(我似乎无法找到相机使用说明) - 也许我是个白痴......:
谢谢!
解决方案
您需要在 info.plist 文件中添加 Camara 使用说明,并请求您的应用程序访问相机的权限。
将此添加到您的 plist 文件中:
Privacy - Camera Usage Description
有一些文字,如
“我们需要您的许可才能访问设备摄像头”
请求许可:
AVCaptureDevice.requestAccess(for: AVMediaType.video) { granted in
if granted {
// show the image picker
} else {
// show an error
}
}
通常最好检查您是否需要权限或权限处于什么状态,所以我会这样做......
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
checkCameraPermissions()
}
private func checkCameraPermissions() {
let status = AVCaptureDevice.authorizationStatus(for: .video)
switch status {
case .authorized:
self.presentPicker()
case .notDetermined:
self.requestPermissions()
case .denied:
// user denied access
self.permissionDenied()
}
}
private func requestAccess() {
AVCaptureDevice.requestAccess(for: AVMediaType.video) { granted in
if !granted {
// show an error
}
// call it again in to recheck now that permissions have changed.
checkCameraPermissions
}
}
private func presentPicker() {
// permissions are all set, continue as planned.
}
private func permissionDenied() {
// show an alert and link to app settings to turn on
// usually I would show a view which explains they have denied permission to the camera so this functionality isn't available until they manually change the setting in the app settings.
}
推荐阅读
- r - 为什么我不断收到错误“无效的‘标签’;长度 2 应该是 1 或 3”
- java - 装饰器模式 - 未定义的构造函数
- javascript - 为什么对象解构在风格上不起作用?
- r - 如何在 R 中使用以列表形式存储 500 个回归的预测
- sql - 删除非冲突数据的 Upsert 语句 (Postgres)
- reactjs - 使用 flex:1 导致卡片堆叠,没有 flex 显示列表但没有滚动
- javascript - 使用 JS 从 HTML 点击从 div 生成链接
- javascript - 如何发送响应请求帖子以保存在数据库中?节点?
- android - 退出 Firebase AuthUI 时单击两次错误
- javascript - 如何在 Polymer 中随机化 div 的显示顺序