ImageView不会使用新图像进行更新

Kyl*_*loR 8 image uiimagepickercontroller ios swift

我正在尝试从用户的手机中选择图像并使用所述图像更新图像视图.

我遇到的问题是它不会更新图像.它确实到达那里,因为我添加了断点并且它到达了断点,并且图像视图可以在我手动尝试将其更改为其他地方时更改图像.

但它在我需要时拒绝工作.

我的图片视图:

    lazy var profilePictureImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.image = UIImage(named: "DefaultUser")
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFill

        imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfilePicture)))
        imageView.isUserInteractionEnabled = true
        return imageView
    }()
Run Code Online (Sandbox Code Playgroud)

通过在设备上挑选照片来更新图像的代码:

import UIKit

extension ProfileVC: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    func handleSelectProfilePicture() {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.allowsEditing = true
        present(picker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
         var selectedImageFromPicker: UIImage?
         if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
             selectedImageFromPicker = editedImage
         }
         else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
             selectedImageFromPicker = originalImage
         }
        if let selectedImage = selectedImageFromPicker {
             profilePictureImageView.image = selectedImage
        }
        dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

[编辑]我发现的一件事是,如果我在具有不同图像视图的不同VC上尝试它,它可以按预期工作.我可以在两个VC之间看到的唯一主要区别是我希望它能够工作但不会扩展'UIPickerViewDelegate'和'UIPickerViewDataSource'.会有冲突吗?

Sla*_*vik 8

试试这个,它对我有用:

DispatchQueue.main.async {
    profilePictureImageView.image = croppedImage
    profilePictureImageView.setNeedsDisplay()
}
Run Code Online (Sandbox Code Playgroud)

基本上,您需要指定要通过更新图像

profilePictureImageView.setNeedsDisplay()
Run Code Online (Sandbox Code Playgroud)