我有一个CollectionViewController,我在其中联系API以根据一组坐标下载图像。我在cellForItemAt函数中调用此代码,此时它使用来自Flickr的图像实时更新单元格的图像。这很好。
然而,当向上或向下滚动时,它会调用此代码并再次更新单元格,当我更喜欢查看现有单元格时,确定它们是否已填充,并且根本不运行此代码。
我已经尝试在网络代码之前实现逻辑,该代码检查imageView.images是否已存在于我分配给它的本地结构中,但这似乎无法正常工作。
是否有一种简单的方法告诉cellForItemAt“对于已有图像的细胞,不要寻找更多”?
这是我目前的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath as IndexPath) as! CollectionViewCell
// Get images = using the URL
FlickrClient.sharedInstance().getImagesFromFlickr(latitude: selectedPin.lat, longitude: selectedPin.lon, page: pageCount) { (pin, error) in
if let pin = pin {
let url = pin.images[indexPath.item].imageURL
let data = try? Data(contentsOf: url)
performUIUpdatesOnMain {
cell.imageView.image = UIImage(data: data!)
cell.imageView.contentMode = .scaleAspectFill
}
}
}
return cell
}
答案 0 :(得分:0)
使用SDwebImage libray从网址加载图片。
https://github.com/rs/SDWebImage
在行的单元格上调用类似的东西:
let url = pin.images[indexPath.item].imageURL
cell.imageView.sd_setImage(with: url, placeholderImage: UIImage(named: "placeholder.png"))