在我的应用程序中,我有一个滚动视图,其中包含一些对象,例如图像视图、按钮等,并且我的滚动视图具有巨大的内容,因此我需要垂直或水平滚动来探索它。我的问题是如何检查对象是否位于手机屏幕上的可见位置?
编辑:我想检测图像是否完全在滚动视图的框架中。然而CGRectIntersectsRect(bottomScroller.bounds, selectImage_1.frame)
即使有一个小的交叉点也会返回 true。
在我的应用程序中,我有一个滚动视图,其中包含一些对象,例如图像视图、按钮等,并且我的滚动视图具有巨大的内容,因此我需要垂直或水平滚动来探索它。我的问题是如何检查对象是否位于手机屏幕上的可见位置?
编辑:我想检测图像是否完全在滚动视图的框架中。然而CGRectIntersectsRect(bottomScroller.bounds, selectImage_1.frame)
即使有一个小的交叉点也会返回 true。
将您的对象(图像视图、按钮等)框架与scrollView.bounds
:
if (CGRectIntersectsRect(scrollView.bounds, object.frame)) ...
编辑:
如果要确保对象完全显示,则计算交点并将其与对象的框架进行比较:
CGRectEqualToRect(
CGRectIntersection(scrollView.bounds, object.frame),
object.frame);
尽管您可能会找到一种优化的方法来进行该检查。
如其他答案中所述,您将希望使用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
.