gpt4 book ai didi

ios - CGRectContainsPoint 不适用于不同的 View

转载 作者:行者123 更新时间:2023-11-28 11:04:28 25 4
gpt4 key购买 nike

我正在制作一个简单的拖放项目。当我使用 CGRectContainsPoint 将 View 拖放到不同的 View 时,它会起作用。但是这两个 View 应该在同一个 View 中。现在假设我有一个名为“A”的 View ,它包含两个 View 。一个 UIView 和一个 UIStackView。如果我将 Stack View 内的 View 拖到 UIView,它不会掉落。简单地 CGRectContainsPoint 不适用于从不同 View 拖放。有什么办法解决吗?

最佳答案

由于每个 View 都有自己的坐标系,因此在比较它们之前必须将所有坐标转换为相同的坐标系(例如使用 CGRectContainsPoint。并且您需要了解每个点或矩形,在什么坐标系中给出。Apple 总是在文档中指定它。

作为公共(public)坐标系,选择公共(public)父坐标系或窗口坐标系。

在您的情况下,您比较 View 的中心是否位于另一个 View 的边界内。所以选择一个共同的父 View 作为引用坐标系,例如 View Controller 主视图:

在 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 指定了父 View 坐标系中的边界。因此,我将其更改为 bounds,它在 View 的 onw 坐标系中指定它。此外,center 使用父 View 的坐标系。因此,我将点从 super View 的系统转换为引用 View 的系统。

关于ios - CGRectContainsPoint 不适用于不同的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com