Mac Cocoa: Wie unterscheidet man, ob ein NSScrollWheel-Ereignis von einer Maus oder einem Trackpad stammt?

7

In meiner Anwendung möchte ich das Scrollen nur mit Scrollrad-Aktion von einer Maus und nicht von der Zwei-Finger-Geste auf einem Trackpad ausführen. Grundsätzlich versuche ich festzustellen, ob das scrollWheelEvent von der Maus oder dem Trackpad generiert wird, innerhalb - (void) scrollWheel: (NSEvent *) der Event-Methode. Soweit ich weiß, scheint es keinen einfachen Weg zu geben, dies zu erreichen.

Ich habe versucht, eine boolesche Variable auf "Wahr" und "Falsch" zu setzen - (void) beginGestureWithEvent: (NSEvent *) event; und - (void) endGestureWithEvent: (NSEvent *) Ereignis; Dies ist jedoch keine Lösung, da die Methode scrollWheel: mehrere Male aufgerufen wird, nachdem die Methode endGestureWithEvent: method aufgerufen wurde.

Hier ist mein Code:

%Vor%

Ich weiß, das ist etwas, das nicht Standard ist, aber das ist meine Anforderung. Kennt jemand einen Weg, dies zu tun? Danke!

    
AProgrammer 10.12.2012, 19:17
quelle

4 Antworten

16

-[NSEvent momentumPhase] ist die Lösung. Die vom Trackpad zwischen den Ereignissen beginGesture und endGesture generierten Ereignisse geben einen anderen Wert als NSEventPhaseNone für -[NSEvent phase] zurück, und die Trackpad-Ereignisse, die nach dem Ereignis endGesture generiert werden, geben einen anderen Wert als NSEventPhaseNone für -[NSEvent momentumPhase] zurück. Der Code ist unten,

%Vor%     
AProgrammer 20.12.2012, 22:27
quelle
8

Sie können [event hasPreciseScrollingDeltas] zur Unterscheidung verwenden. Es wurde in OS X Lion hinzugefügt. Es unterscheidet zwischen Zeilenscroll- (Mausräder) und Pixel-Scroll-Ereignissen (Trackpads, magische Maus).

    
Kelvin M 02.11.2013 18:39
quelle
2

Meine Antwort in Swift, aber für Objective C Logik ist das gleiche:

%Vor%     
Igor 12.03.2017 12:52
quelle
0

Die Antwort von @AProgrammer ist möglicherweise nicht verfügbar. Da das Scrollrad-Ereignis, das von der magischen Maus erzeugt wird, folgende Phasenwerte hat: begonnen, geändert und beendet. Und das Scrollrad-Ereignis, das von der mächtigen Maus erzeugt wird, hat keinen Wert für Phase und Momentumphase. So kann die Methode nur mächtige Maus von Magic Mouse und Trackpad unterscheiden.

    
holybiner 18.10.2016 15:24
quelle

Tags und Links