我希望在鼠标移动并获取屏幕上的位置时收到通知。我试过这个:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent *event) {
CGPoint location = [NSEvent mouseLocation];
NSLog(@"Position: %@", NSStringFromPoint(location));
}];
然而,这似乎只在鼠标在我的应用程序窗口中时才有效。只要离开它,我就没有通知。直到我再次进入窗口。这个事件不应该是全球性的吗?
更新:
我提取了有问题的代码并制作了一个单独的示例项目(Dropbox-Link)。可以肯定的是,没有其他任何东西可以干扰它。这是一个干净的项目,只有上面的代码applicationDidFinishLaunching:
。我得到相同的结果,这真的很奇怪。我将视频上传到 youtube:http ://www.youtube.com/watch?v=I3AKgmURaMk 。
这些是我的观察:
- 启动应用程序后,无论我将鼠标移动到何处,都不会立即传递任何事件。
- 单击应用程序的窗口将以某种方式激活事件传递。现在我收到 NSMouseMovedMask 事件,无论我在哪里移动鼠标(这是我想要实现的)。
- 单击返回 Xcode 不会改变任何内容。我不断收到事件。
- 但是,将焦点移回我的应用程序会导致奇怪的行为。当我将鼠标移到 Xcode 上时,我只会在窗口的某些部分上获得事件,而某些部分似乎会吸收事件。更具体地说,我没有通过编辑器或日志视图接收事件。我只在将鼠标移到灰色拆分视图分隔符区域(其中嵌入了标签栏)时才收到它们。