我想做一个在后台运行的OSX应用程序,当在触控板上检测到用四个手指向下滑动时,它会执行一些功能。
似乎很容易。苹果的文档几乎完全展示了这一点。他们的示例监视鼠标按下事件。作为一个简单的测试,我将applicationDidFinishLaunching:
中的以下内容放入AppDelegate
中。
void (^handler)(NSEvent *e) = ^(NSEvent *e) {
NSLog(@"Left Mouse Down!");
};
[NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask handler:handler];
按预期工作。但是,将NSLeftMouseDownMask
更改为NSEventMaskSwipe
不起作用。我错过了什么?
NSEvent的+addGlobalMonitorForEventsMatchingMask:handler:给出了它支持的事件列表,NSEventMaskSwipe
没有列出,所以…这是可以预料的,它不工作。
虽然API显然支持在您自己的应用程序(通过NSResponder
)中本地跟踪手势,但我认为手势不能被设计为全局跟踪。与按键组合不同的是,手势有更低级的形式/类型……基本上只有:
- 缩进/缩出(
NSEventTypeMagnify
) - 旋转(
NSEventTypeRotation
) - 用X手指量(
NSEventTypeSwipe
)方向滑动
没有那么多的自由。对于键,你有很多修饰符(控制、选项、命令、shift)和整个字母数字键,可以产生很多可能的组合,这样就更容易减少与局部事件和全局事件的冲突。类似地,鼠标事件是基于区域的;点击一个区域可以很容易地与点击另一个区域区分开来(从程序和用户的角度来看)。
由于这种较低可能的触摸事件组合,我相信苹果可能故意限制全局使用(例如,一个应用程序,响应整个系统的一个或多个手势)为自己的使用(任务控制,仪表板等)