在巨大的UICollectionView中加载图片

时间:2018-05-06 13:13:40

标签: ios swift sdwebimage

我按以下方式为我的收藏品查看单元格下载图片:

func loadThumbnail(..){

              ...
            //Making the request
            self.ProfilePicture.sd_setImage(with: requestUrl, placeholderImage: #imageLiteral(resourceName: "SharePreviewIcon"), completed: { [weak self] (newImage, error, cacheType, url) in

                if self == nil {
                    return
                }

                if !isActive(){ //If the cell is not active, ignore and return
                    return
                }

                return
            })

}

每次单元格处于活动状态时都会调用loadThumbnail。现在,如果我有30个单元格,并且有15个单元格处于活动状态,那么将加载所有15张图片,并且许多请求被系统取消或简单关闭,因为它们一次太多。

我还是个业余爱好者,我只是不知道该怎么做。 非常感谢。

重要编辑*

所有内容都存在于选项卡控制器中,每个选项卡都有自己的集合视图。如果我在prepareForUse()方法中取消下载,那么只有那些被回收的单元格才会被取消。

如果我切换标签,仍然有效的单元格将被取消,我无法从新的集合视图中加载单元格。

1 个答案:

答案 0 :(得分:1)

你应该明白,在CellForItem里面你会重复使用这个单元格,所以你在单元格上开始的请求可以在滚动时在同一个单元格上被调用。

考虑这样做 - 在CellForItem调用loadTumbnail时,这将像您一样加载图像。

在单元格覆盖 - prepareForReuse内,你应该取消请求

func prepareForReuse() {
    super.prepareForReuse()
    imageView.cancelCurrentImageLoad; // UIImageView for whatever image you need to cancel the loading for
}

这将在启动另一个请求之前取消该请求。

另一件事 - self.ProfilePicture,考虑将imageView名称更改为小写。

https://developer.apple.com/documentation/uikit/uicollectionreusableview/1620141-prepareforreuse