【问题标题】:iphone development: how to check if an object located on the phone's screeniphone开发:如何检查一个物体是否位于手机屏幕上
【发布时间】:2012-08-28 07:24:08
【问题描述】:

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

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

【问题讨论】:

    标签: iphone objective-c ios uiimageview scrollview


    【解决方案1】:

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

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

    编辑:

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

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

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

    【讨论】:

    • 感谢您的回答,但问题是我想检测图像是否完全在滚动视图的框架中。但是,即使有一个小交叉点,它也会返回 true。
    【解决方案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 &gt; y)//do something 的内容。

    【讨论】:

    • 感谢您的回答,但问题是我想检测图像是否完全在滚动视图的框架中。但是,即使有一个小交叉点,它也会返回 true。
    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2011-09-01
    • 1970-01-01
    • 2012-11-26
    • 2014-12-02
    • 2011-01-09
    相关资源
    最近更新 更多