我试图检测两个视图是否相交:一个视图是主要故事板的子视图,以及一个主要故事板子视图的子视图。
我尝试使用subview1.frame.intersects(subview2.frame)
,但它不起作用。上述函数始终返回false
。
至于上下文,我正在尝试拖动subview1并将其拖放到subview2上,并检测.Ended
PanGesture
状态下两个视图之间的冲突。
视图层次结构可以表示如下:
main view
/ \
subview1 view2
\
subview2
答案 0 :(得分:8)
如果没有看到你的视图层次结构,我只能猜测它可能不起作用,因为.intersects比较同一坐标空间中的两个rects,你的视图可能有不同的坐标空间(除非它们是具有相同superview的兄弟姐妹) ,因为.frame总是在你的superview的坐标中)。 UIView有一堆转换方法(你希望convertRect:fromView)将一个点或矩形从一个视图的坐标空间转换为另一个。一旦你在同一坐标空间中有两个rects,就可以使用/ intersects()。
subview1.frame.intersects(subview1.convertRect(subview2.frame, fromView: subview2))
答案 1 :(得分:2)
我使用bounds
代替frame
使其工作。因此,使用subview1.bounds.intersects(subview2.bounds)
时,当我将true
放到subview1
时,它会返回subview2
根据here:
UIView的界限是矩形,表示为相对于其自身坐标系(0,0)的位置(x,y)和大小(宽度,高度) /强>
UIView的框架是矩形,表示为位置(x,y)和尺寸(宽度,高度)相对于超级视图它包含在内
我不确定为什么当两个UIView具有不同的父级时,使用具有相对于其自身坐标的位置和大小的CGRect。如果有人能够解释我的意思,我会接受这个答案。
答案 2 :(得分:0)
如果您只想检测它是否相交,那么只需
run the project
debug tab
view debugging
show view frames
您会看到这些视图是否相互交叉?我希望它有所帮助。