iphone:CGRectInterest,命中测试

时间:2012-01-11 17:45:20

标签: objective-c ios

我在UIScrollView中有一个UIImageView,我有另一个UIImageView(dragImage),它位于滚动视图的外部,但在主视图控制器的视图中使用UIScrollVIew。

我想检查一下dragImage是否与scrollview中的imageview相交,还想知道相交多少..

什么是好方法?

这是我的结果/代码,效果很好:

CGRect tabFrame = CGRectMake(0, ((TAB_HEIGHT+2)*i) + scrollView.frame.origin.y, TAB_WIDTH, TAB_HEIGHT);
            CGRect dragFrame = dragImage.frame;

            CGRect collision = CGRectIntersection(dragFrame,tabFrame);

            int area = collision.size.width * collision.size.height;

            if (area>selectedArea) {
                selectedArea = area;
                selectedTab=i;
            }


            if (selectedArea>600) break;

2 个答案:

答案 0 :(得分:2)

您需要使用CGRectIntersectsRect()CGRectIntersection()来分析两个矩形是否重叠以及分别重叠多少。例如......

BOOL dragImageIntersectsScrollView = CGRectIntersectsRect(dragImage.frame, scrollView.frame);
CGRect intersectionRect = CGRectIntersection(dragImage.frame, scrollView.frame);

if (!dragImageIntersectsScrollView)
{
    NSLog(@"Rectangles do not intersect");
}
else
{
    NSLog(@"Intersection rect: %@", NSStringFromCGRect(intersectionRect))
}

CGRectIntersectsRect()并非绝对必要,因为您只需检查CGRectIntersection()的返回值即可。如果它们不相交,那么它将返回一个空矩形。您可以使用CGRectIsNull()检查此内容。

答案 1 :(得分:-1)

UIScrollView = A中的UIImageView,拖动视图= B和UIScrollView =滚动。在scroll + scroll.y = jy中获取Ay的偏移量以获取UIImageView的y位置,然后在scroll + scroll.x = jx中获取Ax的偏移量,这将获得imageview的xy位置和您可以轻松访问UIImageView的宽度。假设你有一个分配给A的变量。你只需要取B的x和A的x,然后看看B.x> j.x&& b.x< j.x + a.width检查左上方x位置是否在框中的某个位置,并且b.y> j.y&& b.y< j.y + a.width。基本上,在从滚动视图和scrollviews位置获得偏移量后,你可以做任何想要的数学运算来获得UIImageView的实际x和y。