如何在用户配置文件 View Controller 上将图像从 fire storage 显示到 UIImageView?

How do you display an image from fire storage to UIImageView on user profile View Controller?

我已经编写了这么多代码并且能够获得 UIImagePickerController 设置,当用户选择照片时它会自动将其上传到他们从 Firestore 数据库分配给他们的 uid,但是当我去另一个 viewController 然后切换回配置文件 viewController 图像已重置,我可以再次选择一个图像并将其上传到 fire 存储但不会保留在 UIImageView 返回个人资料页面后。

关于每次用户访问其用户个人资料页面时如何保留图像或如何在 UIImageView 中获取和显示图像的任何帮助?谢谢

这里是关于我如何允许用户选择以及如何将其上传到 fire storage 的代码。

extension ProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let imageSelected = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
        {
            image = imageSelected
            profileimage.image = imageSelected
            
        } else if let imageOriginal = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            image = imageOriginal
            profileimage.image = imageOriginal
        }
        guard let imageSelected = image?.pngData() else {
            return
        }
        
        if Auth.auth().currentUser != nil {
            storage.child("images/"+Auth.auth().currentUser!.uid+"+.png").putData(imageSelected, metadata: nil, completion: { _, error in
            })
            
            func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
                picker.dismiss(animated: true, completion: nil)
            }
            
        }
        
        picker.dismiss(animated: true, completion: nil)
        
    }
}

我解决了我自己的问题,所以我想我会 post 解决方案。问题中列出的 UIImagePickerController 代码是正确的,我可以通过一次更改使用它来使图像加载速度更快。代替 imageSelected = image?.pngData() 我用这个代替了它...

guard let imageSelected = image?.jpegData(compressionQuality: 0.5) else { return }

我还创建了一个功能来下载图像并将其放在 UIImageView 中,每次用户重新访问个人资料页面时,如果他们选择,他们只需单击图像并上传新的个人资料pic 和下载图像功能保持设置。这是我用来完成这个的功能...

private func downloadimages() {
    let reference = Storage.storage().reference(withPath: "\("images/"+Auth.auth().currentUser!.uid+"+.jpg")")
    reference.downloadURL { (URL, error) in
        let data = NSData(contentsOf: URL!)
        let image = UIImage(data: data! as Data)
        self.profileimage.image = image
    }
}

我只是在

中调用了这个函数
override func viewDidLoad() {
    super.viewDidLoad()
}

很快,完美!