我正在做一个简单的拖放项目。当我使用CGRectContainsPoint
拖动视图并拖放到其他视图时,它可以工作。但是,两种观点都应该在同一观点中。现在假设我有一个名为“A”的视图,它包含两个视图。一UIView
和一UIStackView
。如果将堆栈视图内部的视图拖动到UIView,它不会掉落。只是CGRectContainsPoint
不能从不同的视图拖放。有什么办法解决吗?
最佳答案
由于每个视图都有其自己的坐标系,因此必须在比较之前将所有坐标转换为相同的坐标系(例如,使用CGRectContainsPoint
。并且您需要了解每个点或矩形的坐标系)。在文档中指定它。
作为 public 坐标系,请选择一个 public 父坐标系或一个窗口。
在您的情况下,您比较视图的中心是否在另一个视图的边界内。因此,请选择一个共同的父视图作为参考坐标系,例如视图控制器的主视图:
在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
指定 super 视图的坐标系中的边界。因此,我将其更改为bounds
,它在视图的onw坐标系中指定了它。此外,center
使用 super 视图的坐标系。因此,我将点从 super 视图的点转换为参考视图的系统。关于ios - CGRectContainsPoint不适用于不同的 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38957319/