12
votes

Mac Cocoa - Comment puis-je détecter les gestes de défilement Trackpad?

Je veux détecter des gestes de défilement (deux doigts sur Trackpad). Comment devrais-je faire ça?


2 commentaires

Ceci Documentation devrait aider


déjà vérifié. N'a pas aidé


3 Réponses :


27
votes

On dirait que vous souhaitez remplacer la verche View de votre vue: code> méthode. Vous pouvez utiliser le NSEvent code> 's deltax code> et Deltay code> pour obtenir combien l'utilisateur a défilé par.

code: p >

@implementation MyView

- (void)scrollWheel:(NSEvent *)theEvent {
    NSLog(@"user scrolled %f horizontally and %f vertically", [theEvent deltaX], [theEvent deltaY]);
}

@end


1 commentaires

Notez que la documentation d'Apple recommande d'utiliser ScrollingDeltax et ScrollingDeltay pour accéder aux valeurs NSScrollHeel (OX 10.7 et ultérieur).



13
votes

Vous devez le faire en mettant en œuvre des méthodes d'événement tactile de Nsview code> dans votre sous-classe personnalisée. Ces méthodes sont les suivantes:

[self setAcceptsTouchEvents:YES]; 


3 commentaires

Merci, je cherchais ça.


Apple recommande explicitement contre cette solution. Voir «Événements de souris et le trackpad» dans Développeur .apple.com / Bibliothèque / Mac / Documentation / Cocoa / Conceptu Al / ...


Ces méthodes conviennent mieux à la détection de deux gestes de glissière à doigts. Utilisez le volant à défiler à la place.



6
votes

Pour détecter l'événement de la roue de défilement, utilisez - (VOID) Scrollhefheel: (NSEvent *) La méthodeEvent.

- (void)scrollWheel:(NSEvent *)theEvent
    {
        if([theEvent phase])
        {
            // theEvent is generated by trackpad
        }
        else
        {
            // theEvent is generated by mouse
        }
    }


3 commentaires

Report - [Link] ( Stackoverflow.com/questions/13807616/... ). Désolé, j'ai déjà donné le mauvais lien.


Incorrect. Lors du défilement avec la souris magique Apple, la phase peut être> 0.


J'ai essayé votre réponse sur OSX 10.10 et la mendicitéWithevent: et de l'endguewithevent: sont pas appelé lors du défilement. Selon la documentation, ces deux méthodes ne sont activées que pour les événements tactiles et les gestes.