我正在做一个简单的拖放项目。当我CGRectContainsPoint
用来拖动视图并放在其他视图上时,它可以工作。但是,两种观点都应该在同一个观点中。现在假设我有一个名为“ A”的视图,它包含两个视图。一个UIView
和一个UIStackView
。如果将堆栈视图内的视图拖动到UIView,它不会掉落。只要CGRectContainsPoint
不用于拖动并从不同角度掉落工作。有什么办法解决吗?
由于每个视图都有其自己的坐标系,因此在比较它们之前必须将所有坐标转换为相同的坐标系(例如,使用CGRectContainsPoint
。并且您需要了解每个点或矩形的坐标系。Apple始终指定它在文档中。
作为公共坐标系,请选择公共父级或窗口之一。
在您的情况下,您比较视图的中心是否在另一个视图的边界内。因此,选择一个公共父视图作为参考坐标系,例如,视图控制器主视图:
在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
使用超级视图的坐标系。因此,我将点从超级视图的点转换为参考视图的系统。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句