在UIScrollView中确定可见子视图的好方法

时间:2014-08-29 21:48:17

标签: ios objective-c uiscrollview lazy-loading

我试图找到确定UIScrollView中可见子视图的最佳方法,我已经找到了一个很好的方法,它是:当UIScrollView滚动时,我迭代了我的UISCrollView中的子视图数组然后通过检查子视图的框架是否与滚动视图边界相交来查明每个子视图是否可见,我还缓存了滚动视图已达到的最大偏移量,因此{ {1}}方法在同一偏移处不会被多次调用。我将此代码用于此方法:

scrollViewDidScroll:

这很正常,但这里唯一的问题是我必须在CGFloat currentXOfsset = scrollView.contentOffset.x; if (currentXOfsset > maxScrolledXOffset) { for (UIView *subview in scrollView.subviews) { if ([subview isKindOfClass:[UIButtonWithImageURL class]] && CGRectIntersectsRect(scrollView.bounds, subview.frame)) { //Do whatever you want with the visible subviews. } } } maxScrolledXOffset = currentXOfsset>maxScrolledXOffset?currentXOfsset:maxScrolledXOffset; 滚动时遍历所有子视图,这会使滚动非常不顺畅,因为我在这些子视图中加载图像。

我可以使用哪些其他方法来确定可见的子视图,但保持平滑滚动?

1 个答案:

答案 0 :(得分:0)

这是正确的方法。这个scrollView中有多少个子视图?它在哪个设备上很慢?您可能正在某处进行另一项繁重的操作(发布更多代码以便我们可以解决这个问题)。

如果您有很多子视图,更快的方法是使用减少要测试的视图数量的算法,如四叉树或静态网格。我很肯定这对你来说肯定是矫枉过正的。 CGRectIntersectsRect最多只进行4次浮点比较。