CGRectContainsPoint 不适用于不同的视图
CGRectContainsPoint does not work on different views
我正在制作一个简单的拖放项目。当我使用 CGRectContainsPoint
将视图拖放到不同的视图时,它会起作用。但是这两个视图应该在同一个视图中。现在假设我有一个名为 "A" 的视图,它包含两个视图。一个 UIView
和一个 UIStackView
。如果我将 Stack View 内的视图拖到 UIView,它不会掉落。简单地 CGRectContainsPoint
不适用于从不同视图拖放。有什么办法解决吗?
由于每个视图都有自己的坐标系,因此在比较它们之前必须将所有坐标转换为相同的坐标系(例如 CGRectContainsPoint
。并且您需要了解每个点或矩形,在给出的是什么坐标系。Apple 总是在文档中指定它。
作为公共坐标系,选择公共父坐标系或 windows。
在你的例子中,你比较视图的中心是否位于另一个视图的边界内。所以选择一个共同的父视图作为参考坐标系,例如视图控制器主视图:
在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
使用超级视图的坐标系。因此,我将点从超级视图的系统转换为参考视图的系统。
我正在制作一个简单的拖放项目。当我使用 CGRectContainsPoint
将视图拖放到不同的视图时,它会起作用。但是这两个视图应该在同一个视图中。现在假设我有一个名为 "A" 的视图,它包含两个视图。一个 UIView
和一个 UIStackView
。如果我将 Stack View 内的视图拖到 UIView,它不会掉落。简单地 CGRectContainsPoint
不适用于从不同视图拖放。有什么办法解决吗?
由于每个视图都有自己的坐标系,因此在比较它们之前必须将所有坐标转换为相同的坐标系(例如 CGRectContainsPoint
。并且您需要了解每个点或矩形,在给出的是什么坐标系。Apple 总是在文档中指定它。
作为公共坐标系,选择公共父坐标系或 windows。
在你的例子中,你比较视图的中心是否位于另一个视图的边界内。所以选择一个共同的父视图作为参考坐标系,例如视图控制器主视图:
在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
使用超级视图的坐标系。因此,我将点从超级视图的系统转换为参考视图的系统。