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))
我正在使用 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))