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!
-[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,
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.