检测不同超视图下两个UIView对象的交集

时间:2012-12-20 16:13:10

标签: ios uiview

我在检测UIView个对象的交集时遇到了问题。

这就是我在下面使用的内容:

对于交叉口两个物体,我需要弄清楚如何将一个坐标系从第一个超视图转换到另一个坐标系。

我使用过这种方法:- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view这里描述link

据我所知,使用这种方法非常简单。但是在不同的情况下,由于文档中的一些描述很难(但可能仅适合我)。

这是我的子视图结构,如下图所示。我已经有了拖放对象的所有方法。但我需要弄清楚如何获得UIView A UIView B 的交集。谢谢你的帮助。

enter image description here

2 个答案:

答案 0 :(得分:5)

我已经实施了这个解决方案:

- (void)putComponent:(NSNotification *)notif {
    // Catch B UIView.
    UIView *view = [notif object];
    // Convertation. [self superview] - is view wher A UIView is placed.
    CGRect convertedRect = [[self superview] convertRect:view.frame fromView:[view superview]];
    // Find center point.
    CGPoint point;
    point.x = convertedRect.origin.x + (convertedRect.size.width / 2.0f);
    point.y = convertedRect.origin.y + (convertedRect.size.height / 2.0f);
    // Find if CGRect (self.frame) contains a point (center of B UIView)
    BOOL contains = CGRectContainsPoint(self.frame, point);
    if (contains) {
        NSLog(@"intersect here");
    }
}

答案 1 :(得分:0)

我认为这相当于答案中的代码,但相当短:

- (void)putComponent:(NSNotification *)note {
    UIView *other = note.object;
    CGPoint otherCenterInMe = [self convertPoint:other.center fromView:other.superview];
    if ([self pointInside:otherCenterInMe withEvent:nil]) {
        NSLog(@"intersect here");
    }
}