【发布时间】:2023-04-03 19:13:02
【问题描述】:
我知道这个问题已经在这里以几种形式提出过,但不幸的是,没有一个建议的解决方案对我有用。
我正在实施 多点触控我的 osx 应用程序的 em> 功能。
我的问题:
我需要解析屏幕上的位置,由屏幕中的 NSPoint 描述坐标,到驻留在此位置(如果有)下的 我的应用程序 的最顶部 NSView 对象。
这有点像 Windows OS 下的 HWND WindowFromPoint( Point)。
需要考虑的几点:
- 我的应用程序管理多个
NSWindows,其中每个窗口包含多个NSViews 的层次结构, - 我感兴趣的
NSView不一定是应用程序Key Window或Main Window,因为它可以是我的任何其他当前非活动的NSView对象,恰好位于此屏幕位置下, - 在一个特定的
NSPoint下,我可能会有多个NSWindows 和/或NSViews。在这种情况下,我只会对最顶层的NSView感兴趣, -
NSViewA 可能位于NSViewB 之上,部分隐藏它,但NSPoint位置仅存在于 B 上,它不是应用程序的最顶层窗口(但只有这个位置的最顶层)。在这里我再次对 B 感兴趣。
我设法做的事情:
- 为其所有窗口枚举
NSApp(NSApp.windows), - 枚举
NSWindow的视图 (NSWindow.contentView.subviews), - 为其子视图枚举
NSView(NSView.subviews)
这样做我设法枚举了我的应用程序的所有NSViews,但我仍然需要过滤掉不相关的不可见的NSViews。
没有对我有用的事情:
-
NSView.hitTest返回nil以获得有效位置, -
NSView.layer.zPositionalwyas 始终为零 (0), -
NSView.subviews列表的顺序也不反映当前的 GUI 布局, - 测试
NSView是否可见也无济于事,因为如果此窗口被其他窗口隐藏,它也会返回 true。
我的环境:Mac,OSX El-Capitan,XCode-7,Cocoa,Objective-C
感谢您的帮助!
PazO
【问题讨论】:
-
您将
hitTest发送到哪个视图? -
对每个
NSView枚举。即 - 我的应用程序 afaik 中的所有NSView对象。都将返回nil... -
调用
hitTest:的window.contentView应该足够了。您是否将点转换为窗口坐标?
标签: objective-c macos cocoa xcode7 osx-elcapitan