Pregunta

Cuando se desplaza con el nuevo Magic Mouse de Apple (al menos en 10.6, no puedo confirmar cualquier anterior Mac OS) se obtiene de desplazamiento inercial como desplazarse en el iPhone (es decir, después de un movimiento del dedo para desplazarse, se no abruptamente parar, pero ralentiza su lugar poco a poco). Este comportamiento es "gratis" con todos NSScrollViews, parecería.

Hay casos excepcionales, como Tweetie para Mac (he oído Tweetie fue escrito con una vista de clase tabla personalizada que funciona similar a la forma en UITableView funciona en el iPhone).

Mi pregunta es, ¿cómo sabe el punto de vista de desplazamiento cómo hacer esto desplazamiento inercial? Mi conjetura es el ratón [controlador] envía repetidamente eventos de desplazamiento con una magnitud de amortiguación de desplazamiento (o algo así) durante el período de desplazamiento. Pero no estoy muy seguro de cómo funciona.

Estoy teniendo algunos problemas de desplazamiento en mi clase ScrollView y estoy tratando de averiguar por qué (obviamente no tenemos el código fuente para Tweetie para ver por qué no consigue el desplazamiento propiamente dicho), pero sólo tratando para comprender mejor cómo funciona el fin de solucionar mis propios problemas.

¿Fue útil?

Solución

NSScrollView no sabe nada sobre el Magic Mouse. El desplazamiento inercial se lleva a cabo por los acontecimientos de desplazamiento repetidas.

Puede reemplazar el método de -scrollWheel: NSResponder y utilizar NSLog para ver cómo el Magic Mouse de desplazamiento difiere del trackpad y el desplazamiento tradicional.

conjuntos de desplazamiento tradicionales deltaX y deltaY para indicar el número de "líneas" para desplazarse.

dispositivos de desplazamiento suave (Trackpads y el Magic Mouse) utilizan deviceDeltaX y deviceDeltaY para indicar el número de píxeles para desplazarse.

Además, el Magic Mouse utiliza scrollPhase para indicar cuando un desplazamiento inercial está en curso.

Tenga en cuenta que deviceDeltaX y deviceDeltaY son métodos privados de NSEvent.

Otros consejos

para optar por el impulso, añadir @ "NO" para la clave @ "AppleMomentumScrollSupported" en el comienzo de su aplicación a los valores predeterminados del usuario (ver el Magic Mouse Desarrollador Notas de la versión). Así que puede anularlo para Tweetie mediante la adición de esta entrada a sus valores por defecto de tweetue.

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

El código fuente para TUIScrollView está disponible aquí https://github.com/twitter/twui

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top