Изображение из imagePicker просто не будет отображаться в моем imageView - PullRequest
0 голосов
/ 25 октября 2018

В моем приложении есть viewController, который открывается с вызываемой камерой.Когда пользователь берет фотографию и нажимает «использовать фотографию», изображение должно отображаться в том же viewController's imageView.

Я знаю, что это может показаться дубликатом (!) - но я читал здесь много вопросов об отображении изображений из imagePicker, и пока ни одно из их решений не помогло мне.

В принципе я не получаю ошибок ни в консоли, ни в коде.- Но когда я запускаю приложение на своем устройстве, оно останавливается после нажатия кнопки «Использовать фотографию», а затем мне приходится закрывать приложение.

Моя единственная идея сейчас заключается в том, что есть некоторые общие настройки использования конфиденциальности иличто-то вроде этого, которое мне нужно установить, чтобы показать фотографии пользователя, но в этом случае я не знаю, что и как!

Пожалуйста, помогите!

Код:

class CreateNewPerson: UIViewController, UITextFieldDelegate,
UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var personPhoto: UIImageView!
    let imagePicker = UIImagePickerController()

    override func viewDidAppear (_ animated: Bool) {
        checkCameraPermissions()
        super.viewDidAppear(true)
    }

    private func checkCameraPermissions() {
        let status = AVCaptureDevice.authorizationStatus(for: .video)
        switch status {
        case .authorized: self.presentPicker()
        case .notDetermined: self.requestAccess()
        case .denied: print("Permission denied.")
        case .restricted: print("Permission restricted.")
        }
    }

    private func requestAccess() {
        AVCaptureDevice.requestAccess(for: AVMediaType.video) { granted in
            if !granted {
                print("Error.")
            } else {
                self.checkCameraPermissions()
            }
        }
    }

    private func presentPicker() {
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        present(imagePicker, animated: true, completion: nil)
    }

    private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : UIImage]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage]
        imagePicker.delegate = self
        personPhoto.contentMode = .scaleAspectFit
        personPhoto.image = chosenImage
        dismiss(animated: true, completion: nil)
    }
}

Так что да - в принципе, это только последний метод, который действительно является проблемой!Камера показывает и все, но я не могу показать фото .. Что не так с моим подходом?

Спасибо!

1 Ответ

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

Поскольку вам просто нужно представить стандартное средство выбора изображений iOS, нет необходимости в AVCaptureDevice с этими разрешениями или даже import AVFoundation вообще!

class CreateNewPerson: UIViewController, UITextFieldDelegate,
UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var personPhoto: UIImageView!
    let imagePicker = UIImagePickerController()

    private func presentPicker() {
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        present(imagePicker, animated: true, completion: nil)
    }

    // Swift 4.2
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        let chosenImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
        personPhoto.contentMode = .scaleAspectFit
        personPhoto.image = chosenImage
        picker.dismiss(animated: true, completion: nil)
    }

    /*
    // Swift 4.1
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
        personPhoto.contentMode = .scaleAspectFit
        personPhoto.image = chosenImage
        picker.dismiss(animated: true, completion: nil)
    }
    */
}
...