如何在用户配置文件视图控制器上显示从火存储到 UIImageView 的图像?

Posted

技术标签:

【中文标题】如何在用户配置文件视图控制器上显示从火存储到 UIImageView 的图像?【英文标题】:How do you display an image from fire storage to UIImageView on user profile View Controller? 【发布时间】:2021-11-07 22:34:26 【问题描述】:

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

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

这是关于我如何允许用户选择以及如何上传到火存储的代码。

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)
        
    

【问题讨论】:

【参考方案1】:

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

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

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

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()

很快,完美!

【讨论】:

以上是关于如何在用户配置文件视图控制器上显示从火存储到 UIImageView 的图像?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:如何使用 UI 图形 PushContext

MVC的秘密

如何展开到导航堆栈上的第一个视图控制器

如何更改在主存储板上显示视图控制器的方式

在单个视图控制器中使用多个 nib 文件?

如何将计算结果存储在 UserDefaults 中以显示在“结果”视图控制器中 [重复]