如何在用户配置文件视图控制器上显示从火存储到 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 的图像?的主要内容,如果未能解决你的问题,请参考以下文章