13

私は NSView のカスタム サブクラスを使用しており、keyDown/keyUp メソッドを介してキーボード イベントを受信して​​います。「Cmd ⌘」キーが押された場合を除いてすべて正常に動作し、keyDown イベントは通常どおり発生しますが、keyUp イベントは発生しません。

私たちの場合、矢印キーを単独で使用して画像を左/右/上/下に移動し、ユーザーが左/右を押しながら「Cmd ⌘」を押したままにすると、代わりに画像が回転します。keyDown イベントを取得すると、画像が回転し始めますが、keyUp が来ないため、停止することはありません。他の修飾子にはこの問題はありません (たとえば、別のキーが押されている間に Shift、Ctrl、または Alt が押されている場合、期待どおりに keyUp が取得されます)。1 つのオプションは、別の修飾子を使用することですが、PC バージョンとの一貫性を維持することをお勧めします (Cmd は、Windows で Ctrl を使用する場合の代わりに使用され、標準のコピー/貼り付けコマンドとの一貫性を維持します)。

なぜこれを行うのか誰にもわかりますか?バグのように感じますが、おそらく奇妙な「正しい動作」であり、それを回避する方法 (代替修飾子を使用するか、直接 HID アクセスなどを使用する以外) です。

ありがとう。

4

1 に答える 1

1

flagsChanged修飾キーがダウン/アップしたときに通知を受け取るために使用できます。テクニカル Q&A QA1519他の修飾キーに適用可能な Caps Lock キーの検出を参照してください。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");
        }
    }
}
于 2014-04-12T19:57:00.780 に答える