我正在使用UICollectionView
将图片作为其数据存储区中的元素保存。
我想仅在屏幕上当前显示相应的UICollectionViewCell
时才将高分辨率图片加载到元素中。稍后,当UICollectionViewCell
关闭屏幕时,我想将元素的UIImage
返回到低分辨率版本。
我的问题是,如何检测UICollectionViewCell
何时离开屏幕?
(我尝试使用prepareForReuse
方法但我无法预测何时会调用它。
我目前正在使用scrollViewDidScroll
中的一段代码,每次视图滚动时,我都会检查self.collectionView.visibleCells
以查看哪些单元格已在屏幕上滚动。
这看起来有点开销,我想知道在UICollectionViewCell
本身滚动屏幕时是否有一个方法调用?
答案 0 :(得分:28)
UICollectionViewDelegate
上的collectionView:didEndDisplayingCell:forItemAtIndexPath:
方法应该做你想做的事。
答案 1 :(得分:1)
来自文档。 collectionView:didEndDisplayingCell在完成显示后立即调用,而不是在屏幕关闭时调用
使用此方法检测何时从集合视图中删除单元格,而不是监视视图本身以查看它何时消失
答案 2 :(得分:-1)
collectionView:didEndDisplayingCell:forItemAtIndexPath:
是检测单元格何时离开屏幕的正确方法。
同时,我认为在collectionView:didEndDisplayingCell:forItemAtIndexPath:
中执行清理,而不是告诉您的单元格自己执行清理,更正确不是:
func collectionView(_ collectionView: UICollectionView,
didEndDisplaying cell: UICollectionViewCell,
forItemAt indexPath: IndexPath) {
cell.prepareForReuse()
}
使用这种方法,您的UICollectionViewDelegate
不必知道UICollectionViewCell
子类的任何实现细节。在单元格中,我们将覆盖prepareForReuse
方法:
override func prepareForReuse() {
super.prepareForReuse()
imageView.image = lowResolutionImage
highResolutionImage = nil
}