Jez*_*oke 12 macos cocoa nsview nsresponder keyup
我正在使用NSView的自定义子类并通过keyDown/keyUp方法接收键盘事件,一切正常,除非按下"Cmd⌘"键,keyDown事件正常触发,但keyUp事件永远不会到来.
在我们的例子中,我们使用自己的箭头键向左/向右/向上/向下移动图像,如果用户在按住左/右按住"Cmd⌘"的同时,它将旋转图像.由于我们得到了keyDown事件,因此图像开始旋转,但它永远不会因为keyUp永远不会停止而停止.其他修饰符没有这个问题(例如,如果按住shift,ctrl或alt而按下另一个键,我们会按预期获得keyUp).一种选择是使用不同的修饰符,但保持它与PC版本一致会很好(Cmd用作Windows上使用Ctrl时的替代,使其与标准复制/粘贴命令保持一致等).
有谁知道为什么这样做?感觉就像一个bug,但可能只是奇怪的"正确行为",任何想法如何绕过它(除了使用替代修饰符或使用直接HID访问之类的东西).
谢谢.
您可以使用flagsChanged在按下/按下修饰键时收到通知,请参阅:技术问答 QA1519 检测大写锁定键,该键适用于其他修饰键。请参阅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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |