【问题标题】:How to populate an UICollectionView cell with images from Firebase Storage?如何使用 Firebase 存储中的图像填充 UICollectionView 单元格?
【发布时间】:2024-09-18 00:35:01
【问题描述】:

我正在构建一个需要图像幻灯片作为欢迎控制器背景的应用。我的计划是将图像导入 Firebase 存储中的文件夹,设置服务功能以下载文件夹的图像并附加到模型,然后用图像填充控制器的集合视图单元格。我在正确的路径上做图像幻灯片吗?谢谢。

// 背景图像模型

struct BackgroundImage {
    
    let backgroundImageUrl: String
    
    init(dictionary: [String : Any]) {
        self.backgroundImageUrl = dictionary["backgroundImageUrl"] as? String ?? ""
    }
    
}

// 服务

struct BgImgs {
    let backgroundImage: UIImage
}

static func fetchBackgroundImages(bgImgs: BgImgs, completion: @escaping([BackgroundImage]) -> Void) {
        
        var backgroundImages = [BackgroundImage]()
        
        guard let imageData = bgImgs.backgroundImage.jpegData(compressionQuality: 0.3) else { return }
        let filename = NSUUID().uuidString
        let storageRef = STORAGE_REF.reference(withPath: "/background_images/\(filename)")
        
        storageRef.putData(imageData, metadata: nil) { (meta, error) in
            storageRef.downloadURL { (url, error) in
                guard let backgroundImageUrl = url?.absoluteString else { return }
                
                let values = ["backgroundImageUrl" : backgroundImageUrl]
                let bgImages = BackgroundImage(dictionary: values)
                backgroundImages.append(bgImages)
                completion(backgroundImages)
            }
        }
        
    }

// 欢迎控制器

private var backgroundImages = [BackgroundImage]()

func fetchBackgroundImages() {
        Service.fetchBackgroundImages(bgImgs: backgroundImages) { backgroundImages in
            self.backgroundImages = backgroundImages
        }
    }

【问题讨论】:

  • 我不确定你在这里问什么,因为问题中的代码似乎与问题不匹配。通常,图像 url 将存储在 Firestore 或实时数据库中。您将读取这些内容,遍历每个内容并从存储中检索图像。我没有看到这些图像存储在putData 中的位置,也没有被读取。也许我忽略了一些东西 - 你能澄清问题是什么,然后添加相关代码吗?

标签: ios swift firebase firebase-storage


【解决方案1】:

fetchBackgroundImages 提取完成后,您必须重新加载 UICollectionView

func fetchBackgroundImages() {
        Service.fetchBackgroundImages(bgImgs: backgroundImages) { backgroundImages in
            self.backgroundImages = backgroundImages
            self.collectionView.reloadData()
        }
    }

【讨论】: