3

我想制作一个在后台运行的 OSX 应用程序,并在触控板上检测到用四根手指向下滑动时执行某些功能。

似乎很容易。Apple 的文档在这里几乎完全显示了这一点。他们的示例监视鼠标按下事件。作为一个简单的测试,我将以下内容放入applicationDidFinishLaunching:我的AppDelegate.

void (^handler)(NSEvent *e) = ^(NSEvent *e) {
  NSLog(@"Left Mouse Down!");
};

[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask handler:handler];

这按预期工作。但是,更改NSLeftMouseDownMaskNSEventMaskSwipe不起作用。我错过了什么?

4

1 回答 1

4

好吧,NSEvent 的+addGlobalMonitorForEventsMatchingMask:handler:的文档给出了它支持的事件列表,但NSEventMaskSwipe没有列出,所以......可以预料它不起作用。

虽然 API 显然支持在您自己的应用程序中本地NSResponder跟踪手势(通过),但我相信无法通过设计在全局范围内跟踪手势。与按键组合不同,手势的形式/类型要低得多……基本上只有:

  • 捏入/捏出 ( NSEventTypeMagnify)
  • 旋转 ( NSEventTypeRotation)
  • 用 X 根手指进行定向滑动 ( NSEventTypeSwipe)

没有那么多自由。使用键,您有大量的修饰符(控制、选项、命令、移位)和整个字母数字键,可以进行大量可能的组合,因此更容易减少与本地事件和全局事件的冲突量。同样,鼠标事件是基于区域的;在一个区域中单击可以很容易地与在另一个区域中单击进行区分(从程序和用户的角度来看)。

由于触摸事件的这种可能较低的组合,我相信 Apple 可能会故意限制全局(例如,在一个应用程序中,响应整个系统的一个或多个手势)使用(任务控制、仪表板等)

于 2013-06-25T19:51:34.887 回答