如何在OS X中监控全局滑动手势



我想做一个在后台运行的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)和整个字母数字键,可以产生很多可能的组合,这样就更容易减少与局部事件和全局事件的冲突。类似地,鼠标事件是基于区域的;点击一个区域可以很容易地与点击另一个区域区分开来(从程序和用户的角度来看)。

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

相关内容

  • 没有找到相关文章

最新更新