Ios Swift-检测不同superview的子视图是否相交

Ios Swift-检测不同superview的子视图是否相交,ios,swift,Ios,Swift,我试图检测两个视图是否相交:一个视图是主情节提要的子视图,另一个视图是主情节提要的子视图 我尝试使用子视图1.frame.intersects(子视图2.frame),但它不起作用。上述函数始终返回false 至于上下文,我正在尝试将子视图1拖放到子视图2上,并在.end状态为pangestree时检测两个视图之间的冲突 视图层次结构可以表示为以下内容: main view / \ subview1 view2 \

我试图检测两个视图是否相交:一个视图是主情节提要的子视图,另一个视图是主情节提要的子视图

我尝试使用
子视图1.frame.intersects(子视图2.frame)
,但它不起作用。上述函数始终返回
false

至于上下文,我正在尝试将子视图1拖放到子视图2上,并在
.end
状态为
pangestree
时检测两个视图之间的冲突

视图层次结构可以表示为以下内容:

     main view
    /         \
subview1      view2
                \
                subview2

在没有看到视图层次结构的情况下,我只能猜测它可能不起作用,因为.intersects比较同一坐标空间中的两个矩形,并且您的视图可能具有不同的坐标空间(除非它们是同一superview的同级,因为.frame始终在superview的坐标中)。UIView有一系列转换方法(您需要),可以将点或矩形从一个视图的坐标空间转换为另一个。在同一坐标空间中有两个矩形后,可以使用/intersects()


如果您试图只检测它是否相交,那么

  • 在Xcode
    中运行项目
  • 转到调试选项卡
  • 然后在下面单击查看调试
  • 然后
    显示图幅

您将看到这些视图是否相互相交?我希望它能帮上忙。

我使用
bounds
而不是
frame
使它工作起来。因此,通过使用
subview1.bounds.intersects(subview2.bounds)
,当我将
subview1
放到
subview2
上时,它将返回
true

根据:

UIView的边界是矩形,表示为相对于其自身坐标系(0,0)的位置(x,y)和大小(宽度,高度)

UIView的框架是矩形,表示为相对于包含在其中的superview的位置(x,y)和大小(宽度,高度)


我不确定当两个UIView有不同的父视图时,为什么使用位置和大小相对于自身坐标的CGRect会起作用。如果有人能进一步解释,我会接受这个答案。

什么不起作用?怎么了?你需要提供更多的信息,这样我们甚至可以开始回答你的问题。是的,你是对的!只要对代码稍加修改,我就可以让它正常工作:
subview1.frame.intersects(self.view.convertRect(subview2.bounds,fromView:subview2))
将在两者冲突时返回true。但是为什么使用
subview1.bounds.intersects(subview2.bounds)
也能工作呢?
subview1.frame.intersects(subview1.convertRect(subview2.frame, fromView: subview2))