2

在我的应用程序中,我有一个滚动视图,其中包含一些对象,例如图像视图、按钮等,并且我的滚动视图具有巨大的内容,因此我需要垂直或水平滚动来探索它。我的问题是如何检查对象是否位于手机屏幕上的可见位置?

编辑:我想检测图像是否完全在滚动视图的框架中。然而CGRectIntersectsRect(bottomScroller.bounds, selectImage_1.frame)即使有一个小的交叉点也会返回 true。

4

2 回答 2

4

将您的对象(图像视图、按钮等)框架与scrollView.bounds

if (CGRectIntersectsRect(scrollView.bounds, object.frame)) ...

编辑:

如果要确保对象完全显示,则计算交点并将其与对象的框架进行比较:

CGRectEqualToRect(
      CGRectIntersection(scrollView.bounds, object.frame),
      object.frame);

尽管您可能会找到一种优化的方法来进行该检查。

于 2012-09-03T14:43:11.313 回答
2

如其他答案中所述,您将希望使用CGRectIntersectsRect它,因为仅当您的对象与滚动视图的可见框架相交时才会输出。但是,为了使这更完整,您应该使用UIScrollViewDelegate's允许scrollViewDidScroll您在滚动发生时或多或少地询问交叉点的方法。这是一个例子:

。H

<UIScrollViewDelegate>

.m

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (CGRectIntersectsRect(mySubView.frame, scrollView.bounds)) {
        CGRect intersection = CGRectIntersection(mySubView.frame, scrollView.bounds);
        NSLog(@"%@",NSStringFromCGRect(intersection));
    }
}

编辑:然后使用CGRectIntersectsRect你可以询问特定的交叉点,此时你所要做的就是根据你的需要编写类似if(intersect.x > y)//do something.

于 2012-09-03T14:52:20.280 回答