我在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.frameimageViewA.superview的几何体(坐标系)中,但是UIView.convert(_ rect: to view:)期望rectimageViewA的几何体中。
更新
最简单的解决方案是将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/

10-09 09:14