【问题标题】:How to share image downloaded from firebase storage between different views?如何在不同视图之间共享从 Firebase 存储下载的图像?
【发布时间】:2019-07-22 05:58:50
【问题描述】:

这是我用来从存储中获取图像的代码。它就像魅力一样,但我不想再次在不同的视图上重新下载它。

func retreiveImagesFromFireBase(downloadUrl:String,imageHolder:UIImageView){
    if downloadUrl != "" {
        let storageRef = Storage.storage().reference(forURL: downloadUrl)
        // Download the data, assuming a max size of 1MB (you can change this as necessary)
        storageRef.getData(maxSize: 5*1024*1024) { (data, error) in
            if error == nil {
                if let pic = UIImage(data: data!) {
                    imageHolder.image = pic
                }
            } else {
                print(error)
            }
        }
    }
}

我该如何处理?

【问题讨论】:

  • 缓存图片。意思是:您可以将图像保存在内存中或/和将图像保存在缓存目录中
  • 您是否有多个图像用于不同的视图或单个图像?
  • firebase 离线模式对我们有用吗?
  • 我实际上有两张图片,它们都用于三个以上的视图。
  • 嗨@CaptainNewt,如果你只有两个图像然后存储在userdefault中,然后你可以在任何地方使用,看看我的回答

标签: ios swift firebase-realtime-database firebase-storage


【解决方案1】:

如果你只有一两张图片,那么只需存储在userdefault 中,然后你可以在任何viewController 中访问,将image 存储为datauserdefault 每当您想使用将数据转换为图像并使用它时,请参阅以下代码将数据转换为图像

let image = UIImage(data: imageData)

【讨论】:

    【解决方案2】:

    只需在您的类和函数中全局声明 UIImage,在其中设置 imageHolder,将下载的图像分配给全局图像,然后在任何需要的地方使用它。

    UIImage image;
    
    func retreiveImagesFromFireBase(downloadUrl:String,imageHolder:UIImageView){
                if downloadUrl != ""{
                    let storageRef = Storage.storage().reference(forURL: downloadUrl)
                    // Download the data, assuming a max size of 1MB (you can change this as necessary)
                    storageRef.getData(maxSize: 5*1024*1024) { (data, error) in
                        if error == nil{
                            if let pic = UIImage(data: data!){
                                imageHolder.image = pic
                                image = pic // use it on other views 
                            }
                        }else{
                            print(error)
                        }
                    }
                }
            }
    

    【讨论】:

      【解决方案3】:

      你可以的

      class Service { 
         static let shared = Service()  
         var image1:UIImage?
         var image2:UIImage?
         let imageLink = "//////" // or with SDWebImage
      }
      
      if let pic = UIImage(data: data!){
          Service.shared.image = pic
      }
      

      或者使用SDWebImage并分享链接,你也可以做一个全局变量喜欢

      var image:UIImage? 
      

      但不建议这样做,因为它没有分组让开发人员知道它的源本地/实例/全局,所以它不像单例那样令人困惑

      【讨论】:

      • 我不能使用第三方库,因为我的存储规则不允许他们获取文件,而且我想要证券,所以我不能更改规则。
      • 我是否应该在该类中添加两个 UIImage 变量。
      猜你喜欢
      • 1970-01-01
      • 2016-12-28
      • 2019-11-25
      • 2020-01-09
      • 2018-03-19
      • 1970-01-01
      • 2021-05-10
      • 2019-06-11
      • 1970-01-01
      相关资源
      最近更新 更多