我希望在鼠标移动时得到屏幕上的位置并收到通知。我尝试了以下方法:
[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上时,我只能在窗口的某些部分接收到事件,而其他部分似乎吸收了事件。更具体地说,我不能在编辑器或日志视图上接收事件。只有在灰色分割视图分隔符区域(嵌入选项卡栏的区域)移动鼠标时才会收到它们。