检测iOS UICollectionCell何时离开屏幕



我有一个UICollectionView,它将图片作为元素保存在数据存储中。

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

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

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

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

这似乎有点开销,我想知道每当UICollectionViewCell在屏幕上滚动时,是否有一个方法调用它本身?

UICollectionViewDelegate上的collectionView:didEndDisplayingCell:forItemAtIndexPath:方法应该可以执行您想要的操作。

来自文档。collectionView:didEndDisplayingCell在完成显示后立即调用,而不是在离开屏幕时调用

使用此方法可以检测单元格何时从集合视图中删除,而不是监视视图本身以查看它何时消失

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
 }

相关内容

  • 没有找到相关文章

最新更新