在Cocoa中,我开发了app作为代理(在上部状态栏上仅作为图标运行)。
它可以显示弹出窗口,它基本上是NSWindow
的子类,NSView
为内容。
进入另一个NSView
子类(表示状态栏上的图标)我正在添加
self.settingsPopoverTransiencyMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask handler:^(NSEvent *event) {
[selfReference hideSettingsPopover];
}];
因此,当用户点击外部弹出窗口时,它会隐藏。 我想在用户向上/向下滑动四个手指时执行类似的行为(因此当Exposé或Mission Control正在启动时)。
我尝试使用NSEvent.h
中提供的大量掩码,但没有一个帮助过。
答案 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
}
}