Macos 当Cmd⌘;按下键

Macos 当Cmd⌘;按下键,macos,cocoa,nsview,keyup,nsresponder,Macos,Cocoa,Nsview,Keyup,Nsresponder,我使用了NSView的一个自定义子类,并通过keyDown/keydup方法接收键盘事件,除了“Cmd⌘" 按键时,按键向下事件按正常方式触发,但按键向上事件从未出现 在我们的例子中,如果用户按下“Cmd”,我们将使用箭头键自己向左/向右/向上/向下移动图像⌘“当按左/右键时,它将旋转图像。由于我们获得了“向下键”事件,图像开始旋转,但它从未停止,因为“向上键”从未出现。其他修改器没有这个问题(例如,如果按住shift、ctrl或alt键,同时按下另一个键,我们将获得预期的向上键)。一个选项是使

我使用了NSView的一个自定义子类,并通过keyDown/keydup方法接收键盘事件,除了“Cmd⌘" 按键时,按键向下事件按正常方式触发,但按键向上事件从未出现

在我们的例子中,如果用户按下“Cmd”,我们将使用箭头键自己向左/向右/向上/向下移动图像⌘“当按左/右键时,它将旋转图像。由于我们获得了“向下键”事件,图像开始旋转,但它从未停止,因为“向上键”从未出现。其他修改器没有这个问题(例如,如果按住shift、ctrl或alt键,同时按下另一个键,我们将获得预期的向上键)。一个选项是使用不同的修改器,但最好与PC版本保持一致(在Windows上使用Ctrl时,使用Cmd替代Ctrl,并与标准的复制/粘贴命令保持一致)

有人知道它为什么会这样做吗?它感觉像一个bug,但可能只是奇怪的“正确行为”,知道如何绕过它(除了使用替代修改器或使用类似直接HID访问的方法)


谢谢。

您可以使用
flagsChanged
在修改键向下/向上时收到通知,请参阅:这适用于其他修改键。有关更多修改键代码,请参阅
Carbon/Frameworks/HIToolbox/Events.h

- (void)flagsChanged:(NSEvent *)event
{
    if (event.keyCode == 0x37) { // kVK_Command
        if (event.modifierFlags & NSCommandKeyMask) {
            NSLog(@"Command key is down");            
        } else {
            NSLog(@"Command key is up");
        }
    }
}

这可能是一个可能的解决方案:我有相同的问题。OP询问与命令键一起按下的键的keyUp事件。此keyUp事件从未出现。