Swift: UIView 从哪个方向相交?

Swift: Which direction a UIView is being intersected from?

我正在使用 CGRectIntersectsRect 来测试 blueView(被拖动)是否与 redView(静止)相交。但是,我需要知道 redView 是否从红色的顶部、底部、右侧或左侧与 blueView 相交? 是否有 CG 方法来完成此操作?

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

我要解决这个问题的方法是使用 CGRectIntersectsRect 检查它们是否完全相交,然后如果它们相交,则从 redView 的中心到 blueView 进行测量return 它们(X 和 Y)之间的距离是多少,从中你可以看出交叉点来自哪个角度?

如果您想要更准确一点,可以从 redView 顶部中心到 blueView 底部中心进行测量,所有 4 个边缘都一样吗?然后算出哪个离得最近?

有多种方法可以解决这个问题,但我不知道 'one method fits all' 解决方案。

编辑:

还在想这个,我觉得最准确的做法应该是这样的:

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

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

(P.s。我可能把蓝色 + 红色弄错了,还有顶部和底部。我建议只是玩玩并在拖动项目时记录这些值)

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

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