如何确定何时显示 UICollectionViewCell?
Posted
技术标签:
【中文标题】如何确定何时显示 UICollectionViewCell?【英文标题】:How can I determine when a UICollectionViewCell is displayed? 【发布时间】:2013-06-25 18:24:15 【问题描述】:我想知道UICollectionViewCell
何时显示在实际屏幕上。 cellForRowAtIndexPath
是不够的,因为此时实际上还没有看到单元格。 didEndDisplayingCell
是不够的,因为它会在单元格从视图中移除时被调用。
UITableViewDelegate
有一个 willDisplayCell
方法,过去我发现它对类似的东西很有用,但它似乎在 UICollectionViewDelegate
中不存在。
如何确定单元格何时显示在屏幕上?
【问题讨论】:
【参考方案1】:创建UICollectionViewCell
的子类。覆盖其didMoveToWindow
方法:
- (void)didMoveToWindow
if (self.window != nil)
// I am now in the window's view hierarchy and thus “on screen”.
从技术上讲,单元格可能仍然不可见,要么是因为它位于窗口的可见边界之外,要么是因为它被另一个视图覆盖。但通常情况下两者都不会。
还要注意,如果一个单元格被重用,它可能不会从视图层次结构中删除或重新添加到视图层次结构中。集合视图只能更改单元格的框架。 (我知道 UITableView
从 ios 6.0 开始对表格视图单元格执行此操作。)在这种情况下,当单元格被重新用于另一个项目时,您不会收到 didMoveToWindow
消息。
如果您解释为什么您想知道何时显示单元格,我们或许可以为您提供更好的答案。
【讨论】:
首先,我只是在寻找一个分析事件,这样我就可以将单元格的视图与不同的操作进行比较。但我也在考虑一些创意动画,在用户真正看到单元格之前我不想开始。【参考方案2】:-[UICollectionView visibleCells]
返回屏幕上所有可见单元格的 NSArray
【讨论】:
这可能是解决方案的一部分,但我无法确定调用可见单元格的好地方。我可以在滚动事件期间执行此操作,但随后我必须跟踪我已经确定可见的单元格......那里有很多复杂性,我认为这是不可行的。 这可能会报告不在屏幕上的单元格。以上是关于如何确定何时显示 UICollectionViewCell?的主要内容,如果未能解决你的问题,请参考以下文章