0

でボタンを動的に作成していますUIView。このコードを使用してドラッグして移動できます

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

ボタンを複数持つことができます。ボタンをドラッグしているときに、他のボタンと交差していないか確認する必要がありますか?

これどうやってするの?

4

3 に答える 3

1

ボタンのフレームを取得し、これを使用して確認できます

if(CGRectIntersectsRect(firstButton.frame, secondButton.frame))  {
      return YES;
}
于 2013-05-01T12:33:57.673 に答える
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;
}

ボタンとドラッグされたボタンを含むビューをパラメーターとして渡して、このメソッドを呼び出します。

于 2013-05-01T12:37:08.993 に答える
1

このボタンのフレームを他のすべてのボタンのフレームと比較するだけです。これは、他のボタンの知識が必要なため、View Controller に入れる必要があるサンプル コードの一部です。

- (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;
}
于 2013-05-01T12:38:54.237 に答える