从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;滚动时滞后,特别是因为已经收集了所有数据。
答案 0 :(得分:1)
性能很低,因为您正在从主线程下载每个图像,这会阻止UI。异步下载图像并更新集合视图单元格,这将解决性能问题。
滚动时,与主题相关联的每个图像都会在主线程中下载并导致延迟滚动。