1

CGRectIntersectsRect用来测试blueView(被拖动)是否与redView(静止)相交。但是,我需要知道是否与红色的顶部、底部、右侧或左侧redView相交?blueView有没有CG方法可以做到这一点?

4

2 回答 2

0

我不知道有任何 CG 方法可以做到这一点。

我要解决的方法是CGRectIntersectsRect检查它们是否完全相交,然后如果它们相交,从中心测量redViewblueView哪个将返回它们之间的距离(X和Y),你可以从中看出交叉点来自哪个角度?

如果您想要更高的精度,您可以从redView顶部中心blueView到底部中心进行测量,并且所有 4 个边缘都相同?然后找出哪个是最接近的?

有多种方法可以解决这个问题,但我不知道“一种方法适合所有”的解决方案。

编辑:

还在想这个,我认为最准确的方法是这样的:

let leftDistance = blue.origin.x - (red.origin.x + red.width)
let rightDistance = (blue.origin.x + blue.width) - red.origin.x
let topDistance = blue.origin.y - (red.origin.y + red.height)
let bottomDistance = (blue.origin.y + blue.height) - red.origin.y

这些距离中的最低者=来自左侧、右侧、顶部或底部。

(Ps 我可能弄错了蓝色+红色,以及顶部和底部。我建议在拖动项目时试一试并记录这些值)

于 2015-02-19T14:48:23.147 回答
0

这是我最终使用的解决方案,以防其他人正在寻找它。下面的代码行测试交叉点是否垂直(顶部和底部视图相交),其中 a 和 b 是两个视图相交的每一个的 view.frame。

if ((a.maxY > q.maxY) && (b.minY < q.minY)) || ((a.maxY < q.maxY) && (b.minY > q.minY))

于 2015-02-22T14:15:17.777 回答