在按下手势识别器的处理程序中,我尝试找出是否已按下 CMD 或 Shift,如下所示:
- (void)handlePress:(NSPressGestureRecognizer*)gr {
NSEventModifierFlags flags = [[NSApp currentEvent] modifierFlags];
if (flags & NSCommandKeyMask) {
NSLog(@"CMD pressed");
}
}
但是,该标志只能在 keyDown 或 keyUp 事件处理程序方法中正确设置。 NSGestureRecognizer 似乎没有公开事件对象,因此我从 NSApp 获取 currentEvent 。我错过了什么?
最佳答案
您可以使用 NSGestureRecognizerDelegate
来代替子类化,如下所示:
extension ViewController : NSGestureRecognizerDelegate
{
func gestureRecognizer(_ gestureRecognizer: NSGestureRecognizer,
shouldAttemptToRecognizeWith event: NSEvent) -> Bool {
return event.modifierFlags.contains(.command)
}
}
从技术上讲,这只会识别鼠标按下时按住的修饰键,但从 UI 的角度来看,这可能正是您想要的。
关于macos - 如何检测在 NSPressGestureRecognizer 事件期间是否按下了 CMD 或 Shift 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159656/