查找位于 NSPoint 位置下的最顶层 NSView 对象

Find the top-most NSView object located under NSPoint position

我知道这里已经以几种形式提出了这个问题,但不幸的是,没有一个建议的解决方案对我有用。

我正在实施我的 osx 应用的 多点触控 功能。
我的问题:
我需要解析屏幕上的一个位置,由 NSPoint 在屏幕坐标中描述,从我的应用程序 NSView 对象 位于此位置(如果有)下。

这有点像 HWND WindowFromPoint( Point) 下的 Windows OS。

需要考虑的几点:

我成功完成的事情:

这样做我设法枚举了我的应用程序的所有 NSView,但我仍然需要过滤掉不可见的不相关 NSView

对我有用的东西:

我的环境:
MacOSX El-CapitanXCode-7CocoaObjective-C

感谢您的帮助!
PazO

找到了:

// 1. Get the Window-Number of the NSWindow object owning this point:
NSInteger   wndNumber   = [NSWindow windowNumberAtPoint:(point) belowWindowWithWindowNumber:(0)];
// 2. Get the NSWindow object associated with this particular Window-Number:
NSWindow*   window      = [NSApp windowWithWindowNumber:(wndNumber)];
// 3. Convert NSPoint values from System-coordinates to NSWindow-coordinates (Thanks @Willeke for his comment)
NSRect      rctScreen;
    rctScreen.origin        = point;
    rctScreen.size.height   = rctScreen.size.width = 0;
NSRect      rctWindow   = [window convertRectFromScreen:rctScreen];
// 4. Now do the hitTest:
NSView*     viewFound   = [[window contentView] hitTest:rctWindow.origin];

显然,每一行都应该针对 nil 进行测试,但为了代码简洁,我将其省略。