如何检查交叉点按钮

时间:2013-05-01 12:31:32

标签: ios objective-c cgrect

我正在UIView动态创建按钮。 我可以使用此代码拖动来移动它们

- (IBAction)draggedOut: (id)sender withEvent: (UIEvent *) event: (NSSet *)touches {
   UIButton *selected = (UIButton *)sender;
   selected.center = [[[event allTouches] anyObject] locationInView:hallView];
}

我可以有一个以上的按钮。当我拖动某个按钮时,我需要检查是否有与其他按钮的交叉点?

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以获取按钮框并使用此

进行检查
if(CGRectIntersectsRect(firstButton.frame, secondButton.frame))  {
      return YES;
}

答案 1 :(得分:1)

您应循环浏览视图中的其他按钮,并为每个按钮检查是否与拖动的按钮相交:

CGRectIntersectsRect (draggedButton.frame, anotherButton.frame);

您可以使用以下功能:

- (BOOL)isThereButtonsIntersectionInView:(UIView *)containerView 
                               forButton:(UIButton *)draggedButton
{
    for(UIView *view in containerView.subviews){
        if([view isKindOfClass:[UIButton class]] &&
            view != draggedButton &&
            CGRectIntersectsRect (view.frame, draggedButton.frame)){

                return YES;
            }
        }
    }

    return NO;
}

调用此方法将包含按钮和拖动按钮的视图作为参数传递。

答案 2 :(得分:1)

您只需要将此按钮的框架与所有其他按钮的框架进行比较。 这里有一些示例代码,它们应该放在视图控制器中,因为它需要了解其他按钮。

- (BOOL) button:(UIButton*)button intersectsWithButtons:(NSArray*)moreButtons
{
    CGRect buttonFrame = button.frame;
    for (UIButton *checkButton in moreButtons) {
        if (button != checkButton && CGRectIntersectsRect(buttonFrame, checkButton.frame))
            return YES;
    }
    return NO;
}