CGRectContainsPoint不适用于不同的视图

马梅多夫

我正在做一个简单的拖放项目。当我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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章