Question

Lorsque vous faites défiler avec la nouvelle souris Apple Magic Mouse (au moins 10.6, je ne peux pas confirmer tout précédent Mac OS), vous obtenez défilement inertiel comme le défilement sur l'iPhone (qui est, après un coup de doigt pour faire défiler, il ne pas arrêter brusquement, mais ralentit progressivement vers le bas). Ce comportement est « gratuit » avec tous NSScrollViews, il semblerait.

Il y a des cas exceptionnels, comme Tweetie pour Mac (je l'ai entendu Tweetie a été écrit avec une table personnalisée Voir classe qui fonctionne semblable à la façon dont fonctionne UITableView sur iPhone).

Ma question est, comment les vues de défilement savoir comment faire ce défilement à inertie? Je suppose la souris [pilote] envoie à plusieurs reprises des événements de défilement avec une magnitude de défilement d'amortissement (ou quelque chose comme ça) sur la période de défilement. Mais je ne suis pas vraiment sûr de comment cela fonctionne.

Je suis quelques problèmes de défilement dans ma classe scrollview et je suis en train de comprendre pourquoi (évidemment, nous n'avons pas le code source de Tweetie pour voir pourquoi il ne reçoit pas le défilement correct), mais juste essayer pour mieux comprendre comment cela fonctionne pour corriger mes propres problèmes.

Était-ce utile?

La solution

NSScrollView ne sait rien au sujet de la Magic Mouse. Le défilement à inertie est effectuée par les événements de défilement répétés.

Vous pouvez remplacer la méthode de -scrollWheel: de NSResponder et utiliser NSLog pour voir comment le défilement Magic Mouse se distingue de trackpad et défilement traditionnel.

ensembles de défilement traditionnels deltaX et deltaY pour indiquer le nombre de « lignes » pour faire défiler.

Appareils de défilement lisse (et de Trackpads la Magic Mouse) utilisent deviceDeltaX et deviceDeltaY pour indiquer le nombre de pixels pour faire défiler.

De plus, Magic Mouse utilise scrollPhase pour indiquer quand un défilement à inertie est en cours.

Notez que deviceDeltaX et deviceDeltaY sont des méthodes privées de NSEvent.

Autres conseils

de se retirer de l'élan, ajoutez @ « NO » pour la touche @ « AppleMomentumScrollSupported » au début de votre application aux paramètres utilisateur par défaut (voir Magic Mouse Developer Release Notes). Donc, vous pouvez remplacer aussi pour Tweetie en ajoutant cette entrée à vos valeurs par défaut de tweetue.

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
 [defaults registerDefaults:appDefaults];

Le code source est disponible ici TUIScrollView https://github.com/twitter/twui

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top