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