检测iOS Collection Cell何时离开屏幕

时间:2013-08-27 12:30:10

标签: ios uicollectionview uicollectionviewcell uicollectionreusableview

我正在使用UICollectionView将图片作为其数据存储区中的元素保存。

我想仅在屏幕上当前显示相应的UICollectionViewCell时才将高分辨率图片加载到元素中。稍后,当UICollectionViewCell关闭屏幕时,我想将元素的UIImage返回到低分辨率版本。

我的问题是,如何检测UICollectionViewCell何时离开屏幕?

(我尝试使用prepareForReuse方法但我无法预测何时会调用它。

我目前正在使用scrollViewDidScroll中的一段代码,每次视图滚动时,我都会检查self.collectionView.visibleCells以查看哪些单元格已在屏幕上滚动。

这看起来有点开销,我想知道在UICollectionViewCell本身滚动屏幕时是否有一个方法调用?

3 个答案:

答案 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
 }