2015-08-22 46 views
1

在按手勢識別我試圖找出是否CMD或Shift鍵被按下,這樣的處理程序:如何在NSPressGestureRecognizer事件期間檢測CMD或Shift鍵是否被按下?

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

然而,標誌僅在keyDown或keyUp事件處理方法正確設置。 NSGestureRecognizer似乎沒有公開事件對象,因此我從NSApp獲得currentEvent。我錯過了什麼?

+1

你是對的。檢查[keyDown](https://developer.apple.com/library/mac/documentation/AppKit/Reference/NSGestureRecognizer_Class/index.html#//apple_ref/occ/instm/NSGestureRecognizer/keyDown :) NSGestureRecognizer類的方法描述: 「手勢識別器監視其視圖(和任何子視圖)中發生的事件,但不參與響應者鏈本身。手勢識別器在任何視圖執行前接收事件。使用delaysKeyEvents屬性來控制事件是否傳播到視圖。「 – comrade

回答

0

嘗試繼承NSPressGestureRecognizer以收集鼠標向下事件中的修飾符標誌。

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 
} 

}

相關問題