在cellForItemAt indexPath
我致电:
if cell.venueImageView.image == nil {
cell.loadImage(imageURL: venue.imageURL)
}
loadImage
函数位于UICollectionViewCell
类:
func loadImage(imageURL: String) {
print("LOAD IMAGE: \(imageURL)")
Alamofire.request("http://***/" + imageURL).responseImage { response in
if let image = response.result.value {
self.venueImageView.image = image
}
}
}
第一次显示正确的图像,但是当我向下滚动然后向上滚动时,第一个图像出现在第二个单元格中,第二个图像出现在第一个单元格中,依此类推。我的代码有什么问题?
答案 0 :(得分:2)
在UICollectionViewCell中实现此方法:
override func prepareForReuse() {
super.prepareForReuse()
venueImageView.image = nil
}
每次在重复使用单元格之前都会调用它。 您还应该尝试存储下载的图像。否则,每次滚动时都必须加载图像。
澄清:当屏幕滚动时,您的单元格会被重用,以避免内存泄漏。这意味着您下载的图像也会被删除。下次滚动到单元格时,图像消失,必须再次下载。
如果我是你,我会将所有下载的图像存储在ViewController中的数组中,并使用cellForItemAt indexPath
在cell.venueImageView.image = imageArray[indexPath.row]
中设置图像。