如何在Mac OS X中获取相对于窗口的光标位置?

mk1*_*k12 7 macos cocoa objective-c cursor-position

我可以[NSEvent mouseLocation]用来获取光标的位置,但这给了我屏幕坐标.如何获取光标相对于视图的坐标(当它在其中时)?我搜索了Apple文档但找不到答案.

如果它有所不同,我会希望不断检索鼠标位置,因为它将在每次帧更新中使用.

小智 10

为了完整起见,有一种直接的方法可以在窗口坐标中获得鼠标位置(使用NSWindow).根据您的窗口布局,这可能等同于视图的坐标.

NSWindow *myWindow;
NSPoint mousePos;
...
mousePos = [myWindow mouseLocationOutsideOfEventStream];
Run Code Online (Sandbox Code Playgroud)

返回的坐标是窗口坐标,因此如果鼠标留在窗口/窗口下方,则返回负值.如果鼠标位于窗口右侧/上方,则坐标将超出窗口的大小.


Mat*_*ats 8

NSPoint myPoint = 
    [myView convertPoint:[myWindow convertScreenToBase:[NSEvent mouseLocation]]
                fromView:nil];
Run Code Online (Sandbox Code Playgroud)


omz*_*omz 7

- (void)mouseMoved:(NSEvent *)event
{
    NSPoint locationInView = [self convertPoint:[event locationInWindow]
                                       fromView:nil];
}
Run Code Online (Sandbox Code Playgroud)

还要确保已启用mouseMoved事件:

[window setAcceptsMouseMovedEvents:YES];
Run Code Online (Sandbox Code Playgroud)