如何在使用 UIImagePickerController 选择的 UIImageView 中显示图像?

How do you display an image in a UIImageView that was selected using UIImagePickerController?

我是 Xcode 和 Swift 的新手,我试图在使用 UIImagePickerController 选择的 UIImageView 中显示图像。我使用 @IBOutlet 链接了 UIImageView 并在底部放置了一些 if 语句以允许编辑所选图片,但是当我的代码中弹出错误时我被卡住了。我很确定问题与我引用 UIImageView 的方式有关,但我不知道如何以不同的方式进行。刚弄到这个账号来问这个问题,请见谅我的做法post.

代码如下:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func openPhotosButton(_ sender: UIButton) {
        showImagePickerController()
    }

    @IBOutlet weak var characterView: UIImageView!

}

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    func showImagePickerController() {
        let imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self
        imagePickerController.allowsEditing = true
        imagePickerController.sourceType = .photoLibrary
        present(imagePickerController, animated: true)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as UIImage {
            characterView.image = editedImage
        }
        else if let originalImage = info[UIImagePickerController.InfoKey.originalImage] as UIImage {
            characterView.image = originalImage
        }

        dismiss(animated: true)
    }
}

图片来自Xcode:

把你的方法换成这个

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
            characterView.image = editedImage
        }
        else if let originalImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            characterView.image = originalImage
        }

        dismiss(animated: true)
    }