我使用scrollView实现了我自己的UICollectionView
(找到为什么检查我的上一个问题)。
它工作得很好,现在我想尝试这个:
获取ContentOffset
的当前scroller
,而不是发现此矩形中的子视图。
因此,一种方法是在他的所有子视图上运行并检查交叉点,如:
for(UIView *view in [scroller subViews] )
if(view.frame viewIntersectsWithAnotherView:rect)
nslog(@"yes");
从性能方面来说这是好事吗?有没有更好的办法 ?如果这种方式很好,我究竟能如何表现呢?
感谢。
答案 0 :(得分:2)
直接实现将迭代所有子视图 - 您需要跟踪的单独数组。 (为什么不超过scrollView.subviews
- 请参阅this question),您可以进行简单的检查
CGRect visibleRect = (CGRect){self.contentOffset, self.bounds.size};
for (UIView *subview in self.registeredSubviews) {
if (CGRectIntersectsRect(visibleRect, subview.frame)) {
// it's visible
}
}
现在至于优化
正如您所看到的,它在很大程度上取决于您要优化的方案。
现在需要解决一个重要问题:正如您所知,集合视图会循环使用单元格以优化性能,如果您在设置数据源后立即布置所有视图,则会在内存中爆炸。
此外,这是一项练习,还是你有充分理由不相信UICollectionView
?