我在ViewController中有两个UIImageViews,我正在尝试计算它们何时相交。
imageViewA:位于我的脚本视图中,具有约束,并且位于视图的层次结构中,如下所示:
- Background
-- Images
--- imageViewA
imageViewB:动态创建,并使用uipangesturecognizer在屏幕上拖动。
当拖动结束时,我想检查imageViewB是否与imageViewB相交。我使用了intersects函数,但是没有得到我期望的结果,我想是因为imageViewA在视图的层次结构中,这意味着它在不同的坐标系中。所以我想把两个视图转换成同一个坐标系。我该怎么做?
我试过以下方法:
let frameA = imageViewA.convert(imageViewA.frame, to: self.view)
let frameB = imageViewB.convert(imageViewB.frame, to: self.view)
但它没有给我我期望的结果,哪个框架有一个更大的Y坐标。
我需要这样做吗:
let frameA = imageViewA.superview?.superview?.convert(imageViewA.superview?.superview?.frame, to: self.view)
还有其他一些问题涉及到坐标系的转换,但它们似乎没有解决当视图处于层次结构中时该做什么的问题。
最佳答案
你的问题是imageViewA.frame
在imageViewA.superview
的几何体(坐标系)中,但是UIView.convert(_ rect: to view:)
期望rect
在imageViewA
的几何体中。
更新
最简单的解决方案是将imageViewA.bounds
(在imageViewA
的几何图形中)直接转换为imageViewB
的几何图形,然后查看它是否与imageViewB.bounds
的几何图形(也在imageViewB
的几何图形中)相交:
let aInB = imageViewA.convert(imageViewA.bounds, to: imageViewB)
if aInB.intersects(imageViewB.bounds) {
...
原件
最简单的解决方案是转换
imageViewA.bounds
,它位于imageViewA
自己的几何结构中:let frameA = imageViewA.convert(imageViewA.bounds, to: self.view)
let frameB = imageViewB.convert(imageViewB.bounds, to: self.view)
关于ios - 当UIView处于层次结构时,将两个UIView转换为相同的坐标系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41873911/