Как реализовать камеру в Swift - PullRequest
0 голосов
/ 27 апреля 2018

Мое приложение всегда падает, когда я нажимаю кнопку камеры. Я пытаюсь заставить камеру появляться на моем экране при нажатии кнопки камеры.

@IBAction func ACPressed(_ sender: Any) {
    let picker = UIImagePickerController()

    picker.delegate = self
    picker.sourceType = .camera

    present(picker, animated: true, completion: nil)
}

private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String :AnyObject] ){        
    camera.image = info [UIImagePickerControllerOriginalImage] as? UIImage; dismiss(animated: true, completion: nil)
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вероятно, это проблема симулятора. Если вы хотите добавить код для обработки этого случая, вы можете сделать следующее:

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.camera
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true, completion: nil)
    }

Обернув его в «isSourceTypeAvailable», вы избежите сбоя. Вы можете добавить туда инструкцию else и отобразить предупреждающее сообщение, уведомляющее о проблеме.

0 голосов
/ 27 апреля 2018

Не используйте симулятор для проверки камеры. Используйте реальное устройство. По-другому вы увидите исключение:

*** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Тип источника 1 недоступен»

class ViewController:UIViewController, UIImagePickerControllerDelegate {

    private var imagePicker    : UIImagePickerController!
    private var photo: UIImage?

    @IBAction func ACPressed(_ sender: Any) {
        imagePicker            = UIImagePickerController()
        imagePicker.delegate   = self
        imagePicker.sourceType = .camera
        present(imagePicker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        imagePicker.dismiss(animated: true, completion: nil)
        photo = info[UIImagePickerControllerOriginalImage] as? UIImage

    }
}

Не забудьте установить «Конфиденциальность - Описание использования камеры» в вашем Info.plist

Я не знаю, почему мой ответ опущен, но попробуйте этот код на реальном устройстве, и вы увидите, что код работает отлично!

...