试图找出如何检测我的两个ImageView是否重叠。我没有任何代码,因为我不知道从哪里开始。我已经有代码来拖动更大的圆圈了。当我拖动较大的圆圈时,当较大的圆圈覆盖较小的圆圈时,我希望较小的圆圈消失并在视图控制器内的随机位置产生。就像较大的圆圈正在吃较小的圆圈。另外,如果可能的话,我如何将其连接到我的分数,这样每次较小的圆圈被吃掉它会增加一个点?我知道这有很多要问,但这是我的第一个应用程序并试图获得基础知识。谢谢。
答案 0 :(得分:0)
因此,当您希望较小的圆圈消失时的具体细节取决于您如何定义它,但一个好的开始是从其手势识别器中找到较大视图的位置,并确定该位置是否在较小的视图中#39;来自手势识别器功能的帧。该定义确保较大的圆将与较小的圆重叠,因为半径较大。因此,如果较大的imageView具有pangesturerecognizer,请使用开关案例来确定拖动图像视图的时间或已停止拖动,然后从superview中删除smallImageView。这可以这样做:
switch sender.state{
case .changed:
if smallerImageView.contains(sender.location(in: self.view)){
smallerImageView.removeFromSuperView()
// This will remove the smallerImageView entirely. Here sender is the gesture recognizer.
}
default:
break;
}
要在较大的图像视图吃掉较小的图像时添加一个点,我会设置视图的标记值,然后使imageView具有更大的帧。有关tage属性的更多信息,请参见此处:https://developer.apple.com/documentation/uikit/uiview/1622493-tag
答案 1 :(得分:0)
首先,测试视图的帧以查看它们是否重叠。您可以使用CGRect
intersects(_:)
方法查看帧是否相交。那将是非常快的。
确定rects相交后,构成重叠的内容是特定于应用程序的。可以测试两个图像的非不透明部分中的重叠,但是它非常复杂并且计算成本很高。
如果您的问题只是确定两个圆是否重叠,或者一个圆是否完全包含另一个圆,您只需要使用毕达哥拉斯定理来计算圆心之间的距离并进行一些检查。
经过一番小小的讨论,这就是我想出的:
让我们打电话给圈子A和B.
让我们调用两个圆圈(A.x,A.y)和(B.x,B.y)的中心点。
让我们调用中心d(A,B)
之间的距离。
让我们称之为raidiuses rA + rb
的总和。
让我们调用A的半径减去B rA - rB
的半径,B的半径减去A的半径rB - rA
两个中心d(A,B)
之间的距离为sqrt((A.x - B.x)^2 + (A.y - B.y)^2)
。
d(A,B) > (rA + rB)
。
如果d(A,B)
之间的距离等于rA + rB
{d(A,B) = rA + rB
},则会触及一点。
如果中心d(A,B)
之间的距离小于半径d(A,B) < rA + rB
的总和,则会有一些重叠。
如果中心d(A,B)
之间的距离
如果中心d(A,B)
之间的距离<=而不是B的半径减去A d(A,B) <= (rB - rA)
的半径,则圆圈B完全包含圆圈A.