首页 > 解决方案 > imagePicker 中的图像不会显示在我的 imageView 中

问题描述

我的应用程序中有一个 viewController,它会在调用相机时打开。当用户拍照并按下“使用照片”时,图像应该显示在同一个 viewController 的 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)
    }
}

所以是的 - 基本上这只是最后一个真正成为问题的方法!相机显示所有内容,但我无法显示照片..我的方法有什么问题?

谢谢!

标签: iosswiftimageuiimageviewuiimagepickercontroller

解决方案


由于您只需要提供 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)
    }
    */
}

推荐阅读