从Firebase的URL加载图像时,CollectionsView性能不稳定

时间:2016-10-11 07:52:04

标签: ios swift firebase collectionview

从Firebase加载图像然后将其填充到单元格中时,似乎性能不稳定。我想这可能是因为图像没有缓存。

这位于viewDidLoad()

之后立即从返回的搜索结果中收集URL的函数中
let databaseRef = FIRDatabase.database().reference()

            databaseRef.child("palettes").queryOrdered(byChild: "top").queryEqual(toValue: "#000000").observeSingleEvent(of: .value, with: { (snapshot) in


                if let snapDict = snapshot.value as? [String:AnyObject]{

                    for each in snapDict as [String:AnyObject]{

                        let URL = each.value["URL"] as! String
                        self.URLArray.append(URL)

                        print(self.URLArray)
                    }
                }
            })

以下是填充单元格的功能:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        let textLabel = cell.viewWithTag(2)

        let ootdImage = cell.viewWithTag(4) as! UIImageView

        if let url = NSURL(string: self.URLArray[indexPath.row]) {
            if let data = NSData(contentsOf: url as URL){
                ootdImage.image = UIImage(data: data as Data)
            }
        }

        // display images from the dataArray.
        textLabel?.backgroundColor = averageColor

        return cell

不要担心collectionsView.reloadData(),目前,我已将其设置为必须手动点击按钮重新加载数据,但我仍然不明白为什么会出现#&# 39;滚动时滞后,特别是因为已经收集了所有数据。

1 个答案:

答案 0 :(得分:1)

性能很低,因为您正在从主线程下载每个图像,这会阻止UI。异步下载图像并更新集合视图单元格,这将解决性能问题。

滚动时,与主题相关联的每个图像都会在主线程中下载并导致延迟滚动。