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