我CGRectIntersectsRect
用来测试blueView
(被拖动)是否与redView
(静止)相交。但是,我需要知道是否与红色的顶部、底部、右侧或左侧redView
相交?blueView
有没有CG方法可以做到这一点?
问问题
311 次
2 回答
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
这些距离中的最低者=来自左侧、右侧、顶部或底部。
(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 回答