ios - 我无法在 UIViewController 中访问相机

标签 ios swift camera ios-permissions

我真的希望我没有重复 - 但我在这里阅读了大量不同的相机问题并实现了他们的所有答案,结果相同:没有任何反应!

没有错误,应用程序没有崩溃,没有任何问题 - 只是没有相机的迹象,应该被激活!我的目标是在 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 的照片(我似乎无法在其中找到相机使用说明)-也许我是个白痴...: enter image description here

谢谢!

最佳答案

您需要在您的 info.plist 文件中添加 Camara 使用说明,并请求允许您的应用访问相机。

将此添加到您的 plist 文件中:

Privacy - Camera Usage Description

有一些像

这样的文字

"We need your permission to access the device camera"

请求许可:

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.
}

关于ios - 我无法在 UIViewController 中访问相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52964687/

相关文章:

ios - 从 NSData 加载的 UIImage 仅在新 iPad 3 上显示黑色

iphone - GPUImageAlphaBlendFilter-在一个图像上合并两个图像

ios - 使用 Swift 在 iOS 中将项目添加到数组

objective-c - Interface Builder 有没有办法渲染不覆盖 drawRect : 的 IBDesignable View

java - 相机在 Y 轴上的移动

ios - 修改相机的透视投影

ios - 将数据从 ViewController 传递回根 ViewController?

ios - 如何在 Apple-Watch 上获取 iPhone 日历事件提醒

ios - 频繁使用计算属性访问对象是否会影响性能?

android - 裁剪后设置 ImageView 不起作用