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))