10

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

UICollectionViewCell我只想在元素当前显示在屏幕上时才将高分辨率图片加载到元素中。后来,当UICollectionViewCell屏幕熄灭时,我想将元素返回UIImage到低分辨率版本。

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

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

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

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

4

3 回答 3

27

上的collectionView:didEndDisplayingCell:forItemAtIndexPath:方法UICollectionViewDelegate应该做你想做的。

于 2013-08-27T12:48:03.517 回答
5

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

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

于 2017-08-03T05:43:53.003 回答
-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
 }
于 2018-10-25T15:38:52.290 回答