Я не могу получить доступ к камере в UIViewController - PullRequest
0 голосов
/ 24 октября 2018

Я действительно надеюсь, что я не делаю дубликат - но я прочитал тонну различных вопросов о камере и реализовал все их ответы, с тем же результатом: ничего не происходит!

Нет ошибок, приложениене вылетает, никаких проблем - только нет признаков камеры, которая должна быть активирована!Моя цель - активировать его в 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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Вы должны добавить CreateNewPerson в UINavigationController, после этого запустите ваш код.

Не забудьте добавить Конфиденциальность - Использование камеры Описание в info.plist

0 голосов
/ 24 октября 2018

Вам необходимо добавить описание использования Camara в файл info.plist и запросить разрешение на доступ вашего приложения к камере.

Добавьте это к вашему 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.
}
...