给定一个屏幕位置(例如在拖动操作期间),我如何在我的应用程序中找到位于该位置的视图?
将坐标转换为窗口或源视图坐标很简单,但我找不到任何例程来从给定位置获取视图。除了递归枚举所有子视图/窗口之外,还有其他解决方案吗?
请比 NSView 的 hitTest: 消息更进一步(这是一个很好的答案)。无论嵌套窗口层次结构如何(无需手动迭代所有窗口),是否有通用消息可以在给定位置获得最深视图?
给定一个屏幕位置(例如在拖动操作期间),我如何在我的应用程序中找到位于该位置的视图?
将坐标转换为窗口或源视图坐标很简单,但我找不到任何例程来从给定位置获取视图。除了递归枚举所有子视图/窗口之外,还有其他解决方案吗?
请比 NSView 的 hitTest: 消息更进一步(这是一个很好的答案)。无论嵌套窗口层次结构如何(无需手动迭代所有窗口),是否有通用消息可以在给定位置获得最深视图?
您可以使用NSView
'shitTest:
方法:
返回包含指定点的视图层次结构(包括其自身)中接收器的最远后代,如果该点完全位于接收器之外,则返回 nil。
[[window contentView] hitTest:aPoint]
但是aPoint必须在 superview 的坐标系中:
参数
aPoint
位于接收器超视图坐标系中的点,而不是接收器本身的点。
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.
首先,您应该很少需要它。“为用户交互寻找视图”的概念是响应者链。因此,如果子视图应该响应拖动操作,只需将拖放功能添加到该视图即可。
如果您只需要对该坐标的视图进行最深的点击,您可以使用-hitTest
( NSView
)。上到你的根视图,你会找到父视图。如果您有重叠的视图,它会变得更加复杂。请将该信息添加到您的问题中。