0

我的视图上有两个 UIButtons,我试图检测这两个按钮是否重叠,以便执行以下操作:

如果(重叠)移动第二个按钮

我试过这个:

if (BluetoothDeviceButton.X1 < btn.X2 && BluetoothDeviceButton.X2 > btn.X1 &&
    BluetoothDeviceButton.Y1 < btn.Y2 && BluetoothDeviceButton.Y2 > btn.Y1){

 }

我真的不知道应该放什么来代替 X1、X2 等。而且我真的不知道这种方法是否会起作用。

4

4 回答 4

6

CGRectIntersectsRect(CGRect rect1, CGRect rect2)会告诉你他们的框架是否重叠。

if (CGRectIntersectsRect(btn.frame, BluetoothDeviceButton.frame)) {
   ...
}
于 2013-09-26T16:20:56.417 回答
0

您需要使用BluetoothDeviceButton.frame.origin.xBluetoothDeviceButton.center.x

于 2013-09-26T16:20:34.247 回答
0

首先确保它们在同一个视图中。convertRectToView如果没有,则使用, 或获取他们的帧converRectFromView。然后使用CGRectContainsPoint类的CGGeometry并检查一个按钮的任何角是否位于另一个按钮的框架中。

PS。你的角落将是:

CGFloat x1 = button1.frame.origin.x;
CGFloat y1 = button1.frame.origin.y;
CGFloat x2 = button1.frame.origin.x + button1.frame.size.width;
CGFloat y2 = button1.frame.origin.y + button1.frame.size.height;

你的角落将是:

CGPoint topLeft = CGPointMake(x1,y1);
CGPoint topRight = CGPointMake(x2,y1);
CGPoint bottomLeft = CGPointMake(x1,y2);
CGPoint bottomRight = CGPointMake(x2,y2);

这只是一种可能的解决方案。这只是为了帮助理解几何。

但最简单的解决方案是使用CGRectIntersectsRect (button1.frame, button2.frame);

于 2013-09-26T16:27:35.530 回答
0

使用 BluetoothDeviceButton.frame.origin.x。Frame 属性也包含大小。

于 2013-09-26T16:33:51.633 回答