斯威夫特:UIView与哪个方向相交?

时间:2015-02-19 14:34:18

标签: ios swift cgrectintersectsrect

我正在使用CGRectIntersectsRect来测试blueView(被拖动)是否与redView(静止)相交。但是,我需要知道redView是否与红色的顶部,底部,右侧或左侧的blueView相交? 是否有CG方法来实现这一目标?

2 个答案:

答案 0 :(得分:0)

我不知道有任何CG方法可以实现这一目标。

我这样做的方法是使用CGRectIntersectsRect检查它们是否相交,然后如果它们相交,则从redView的中心开始测量blueView它会返回它们之间的距离(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

这些距离中最低的=来自左,右,上或下。

(P.s。我可能已经错误地使用蓝色+红色,以及顶部和底部。我建议只是在玩游戏并在拖动项目时记录这些值)

答案 1 :(得分:0)

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

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