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使用超视图的坐标系。 因此,我把这个观点从超级视图转换到参考视图的系统。