检测四指手势(Cocoa)

时间:2013-12-23 15:35:57

标签: objective-c macos cocoa

在Cocoa中,我开发了app作为代理(在上部状态栏上仅作为图标运行)。 它可以显示弹出窗口,它基本上是NSWindow的子类,NSView为内容。 进入另一个NSView子类(表示状态栏上的图标)我正在添加

    self.settingsPopoverTransiencyMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask handler:^(NSEvent *event) {
    [selfReference hideSettingsPopover];
}];

因此,当用户点击外部弹出窗口时,它会隐藏。 我想在用户向上/向下滑动四个手指时执行类似的行为(因此当Exposé或Mission Control正在启动时)。

我尝试使用NSEvent.h中提供的大量掩码,但没有一个帮助过。

1 个答案:

答案 0 :(得分:1)

首先在NSView中启用触摸事件:

view.acceptsTouchEvents = YES

NSView子类中,覆盖NSResponder超类中声明的触摸事件方法。如果您要识别4指滑动手势,则可能需要-swipeWithEvent:。由于这会触发具有任意数量手指的滑动事件,因此您只想将其过滤为4指手势。方法-[NSEvent touchesMatchingPhase:inView:]将返回NSTouch个对象的数组,每个手指一个(即数组的计数等于手指的数量)。

总而言之,实现看起来像这样:

- (void)swipeWithEvent:(NSEvent *)event
{
    NSArray *touches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self];
    if (touches.count == 4) {
        // Handle event here
    }
}