在按下手势识别器的处理程序中,我尝试找出是否已按下CMD或Shift,如下所示:

- (void)handlePress:(NSPressGestureRecognizer*)gr {
    NSEventModifierFlags flags = [[NSApp currentEvent] modifierFlags];
    if (flags & NSCommandKeyMask) {
        NSLog(@"CMD pressed");
    }
}


但是,仅在keyDown或keyUp事件处理程序方法中正确设置该标志。 NSGestureRecognizer似乎没有公开事件对象,因此我从NSApp获得了currentEvent。我想念什么?

最佳答案

尝试对NSPressGestureRecognizer进行子类化,以从mouse down事件中收集修饰符标志。

class PressGestureRecognizer: NSPressGestureRecognizer {
var modifierFlags = NSEventModifierFlags (rawValue: 0)

override func flagsChanged (with event: NSEvent) {
    super.flagsChanged (with: event)
    modifierFlags = event.modifierFlags
}

override func mouseDown (with event: NSEvent) {
    super.mouseDown (with: event)
    modifierFlags = event.modifierFlags
}


}

08-28 07:42