CGRectContainsPoint不适用于不同的视图
我正在做一个简单的拖放项目。 当我使用CGRectContainsPoint
拖动一个视图,并放在不同的视图,它的作品。 但是这两种观点都应该是一个观点。 现在让我们说我有一个名为“A”的视图,它包含两个视图。 一个UIView
和一个UIStackView
。 如果我将视图拖到堆视图到UIView它不会丢弃。 只是CGRectContainsPoint
不适用于从不同的视图拖放。 有什么办法可以解决吗?
由于每个视图都有它自己的坐标系,所以在比较它们之前,必须将所有的坐标转换为相同的坐标系(例如,使用CGRectContainsPoint
,并且需要了解每个点或矩形,以及坐标系统。在文档中指定它。
由于通用的坐标系统或者select共同的父窗口或者窗口中的一个。
就你而言,你比较视图的中心是否在另一个视图的边界内。 因此,select一个共同的父视图作为参考坐标系,例如视图控制器主视图:
在Swift中:
let referenceView = self.view // assuming self is the view controller let dropArea = referenceView.convertRect(self.dropAreaView1.bounds, fromView: self.dropAreaView1) let center = referenceView.convertPoint(sender.view!.center, fromView: sender.view!.superview) if CGRectContainsPoint(dropArea, center) { // do something }
请注意, frame
指定超级视图坐标系中的边界。 因此,我已经将其更改为bounds
,它在视图的onw坐标系统中指定它。 而且, center
使用超视图的坐标系。 因此,我把这个观点从超级视图转换到参考视图的系统。