Question

Malheureusement, cela est difficile pour moi de me tester parce que je n'ai pas encore obtenir un Magic Mouse de moi, mais je l'ai été dit par mes testeurs qui ont un souris magique que le défilement de mouvement ne fonctionne pas dans mon application . Je ne l'ai pas sous-classé NSScrollView, mais la vue du document de scrollview est tout personnalisé. Je ne l'ai pas substituée ScrollWheel: nulle part, non plus, et pourtant apparemment juste élan ne fonctionne pas. Je ne suis même pas sûr où commencer. Je pensais que ce serait tout simplement envoyer les événements et les choses se ScrollWheel prendre soin d'eux-mêmes. (Avec la molette ou sur les travaux du trackpad PBM comme prévu.) Il est évident que je dois en quelque sorte faire quelque chose qui est l'arrêter, mais je ne sais même pas par où commencer. Pensées?

Était-ce utile?

La solution

Je me suis dit ceci il y a un certain temps et le problème est que le défilement, je faisais beaucoup de manipulation de l'affichage de fantaisie un peu comme la façon dont l'iPhone le UITableView ajoute et supprime des vues comme ils défilent sur et hors écran. Cela fonctionnait très bien pour la performance -. Mais plus je suis entré dans la programmation OSX, plus je réalisais cela était mauvais pour Mac OS X (mais la bonne idée de l'iPhone)

Quoi qu'il en soit, ce qui se passe vraiment, il semble, est que quand vous faites quelque chose comme un rouleau de roue, l'événement de défilement est envoyé à la vue qui est sous le curseur de la souris, puis il ondule vers le bas les intervenants / vues jusqu'à ce qu'il soit quelque part qu'il gère. Normalement, ce n'est pas un problème, mais avec l'élan de défilement du système d'exploitation est vraiment juste d'envoyer des événements de ScrollWheel toujours plus petits à la vue qui était sous le curseur au moment où le mouvement a commencé . Cela signifie que si la vue est retirée au cours de défilement (car il défile hors de l'écran ou quelque chose), il brise la chaîne et l'élan arrête parce que la vue qui devient encore les messages ScrollWheel ne sont plus dans la hiérarchie de la vue.

La solution « simple » est de ne pas supprimer le point de vue qui a obtenu le dernier événement ScrollWheel - même si elle est hors de l'écran. La meilleure solution (et celui que je suis allé avec) est d'essayer de ne pas utiliser NSViews comme ils sont UIViews et au lieu simplement dessiner le contenu en utilisant drawRect. :) Non seulement est que près d'un milliard de fois plus rapide, cela fonctionne seulement (tm) avec un élan de défilement, car il est comment OSX attend des choses à faire.

Répétez après moi: Mac OS X n'est pas iPhoneOS ..: P

Autres conseils

comportement du défilement Odd peut se produire lorsque vous ne définissez pas la ligne de défilement et la page des propriétés de défilement du NSScrollView lui-même.

Au-delà, vous allez tout simplement devoir obtenir un Magic Mouse - facile à dire ou non :-) - pour tester vous-même ou poster le code entier de votre vue personnalisée ainsi que le contenant xib. Il n'y a aucun moyen d'autres peuvent vous offrir plus que des conjectures (comme ci-dessus) sans elle.

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