我正在制作一个简单的拖放项目。当我使用UIView
拖动视图并放在不同视图上时,它可以正常工作。但两种观点都应该在同一个观点中。现在让我们说我有一个名为" A"它包含两个视图。一个UIStackView
和一个CGRectContainsPoint
。如果我将Stack View中的视图拖到UIView,它就不会掉线。简单地{{1}}不适用于从不同视图中拖放。有什么办法可以解决吗?
答案 0 :(得分:3)
由于每个视图都有自己的坐标系,因此在比较它们之前必须将所有坐标转换为相同的坐标系(例如,使用CGRectContainsPoint
。并且您需要了解每个点或矩形,在什么坐标系中它给出了系统.Apple总是在文档中指定它。
作为公共坐标系,要么选择一个共同的父项,要么选择一个窗口。
在您的情况下,您可以比较视图的中心是否位于另一个视图的边界内。因此,选择一个共同的父视图作为参考坐标系,例如视图控制器主视图:
在斯威夫特:
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
使用超级视图的坐标系。因此,我将点从超级视图转换为参考视图的系统。