2

给定一个屏幕位置(例如在拖动操作期间),我如何在我的应用程序中找到位于该位置的视图?

将坐标转换为窗口或源视图坐标很简单,但我找不到任何例程来从给定位置获取视图。除了递归枚举所有子视图/窗口之外,还有其他解决方案吗?

请比 NSView 的 hitTest: 消息更进一步(这是一个很好的答案)。无论嵌套窗口层次结构如何(无需手动迭代所有窗口),是否有通用消息可以在给定位置获得最深视图?

4

3 回答 3

2

您可以使用NSView'shitTest:方法:

返回包含指定点的视图层次结构(包括其自身)中接收器的最远后代,如果该点完全位于接收器之外,则返回 nil。

[[window contentView] hitTest:aPoint]

但是aPoint必须在 superview 的坐标系中:

参数
aPoint
位于接收器超视图坐标系中的点,而不是接收器本身的点。

于 2013-05-12T16:27:12.933 回答
2

You'll want to call -[NSView hitTest:] and it will return the view, if any, containing the point in question. The receiving view should be your root view (such as the NSWindow's contentView) and the point should be converted to that view's superview's coordinates.

于 2013-05-12T16:30:09.613 回答
1

首先,您应该很少需要它。“为用户交互寻找视图”的概念是响应者链。因此,如果子视图应该响应拖动操作,只需将拖放功能添加到该视图即可。

如果您只需要对该坐标的视图进行最深的点击,您可以使用-hitTest( NSView)。上到你的根视图,你会找到父视图。如果您有重叠的视图,它会变得更加复杂。请将该信息添加到您的问题中。

于 2013-05-12T16:30:46.170 回答