2009-04-24 10 views
5

Me gustaría reproducir el comportamiento flick-to-scroll de UIScrollView, pero no quiero usar (o no puedo usar) esa clase. ¿Que puedo hacer?¿Cómo puedo reproducir el comportamiento flick-to-scroll del iPhone UIScrollView en mi propia vista personalizada?

+0

Nota: La pregunta se refería a una vista OpenGL – Thanks

+0

Es cierto, en mi caso estaba pensando en las vistas OpenGL. Sin embargo, vea mi respuesta a Roger Nolan a continuación: creo que hay muchos casos interesantes que no pertenecen a OGL. –

Respuesta

8

Bien, he respondido esto implementando mi propia biblioteca que captura la dinámica de UIScrollView.

Lo que es útil acerca de mi código es que es independiente del sistema de coordenadas, la velocidad de animación y las clases particulares de UI que está utilizando. Se puede anidar fácilmente en una clase de vista personalizada de su elección.

El comportamiento del flick-to-scroll predeterminado del iPhone es interesante. Si mantienes el dedo hacia abajo durante un tiempo prolongado y lo mueves en varias direcciones, verás que solo la última dirección se usa para calcular el movimiento de desplazamiento.

Si intenta construir este código usted mismo, sin embargo, descubrirá rápidamente que el simple uso de los dos últimos puntos para calcular la dirección del movimiento no lo va a cortar. En cambio, mi código mantiene un breve historial de toques y utiliza la interpolación lineal para determinar dónde habría "tocado" el toque hace algún tiempo. Este punto interpolado se usa como base para calcular el vector de movimiento. Esto conduce a una interacción muy agradable.

El código está disponible en github, aquí: http://gist.github.com/100855. Se libera bajo la licencia BSD.

+0

Respondió su propia pregunta, con un código bastante complicado, en 2 minutos después de haberla preguntado. Es un código interesante, ¡está bien! –

+0

Sí, no sabía si eso era kosher para Stack Overflow pero desde que descubrí que no soy el único que lo buscaba, pensé que sería útil. ¿Hay un foro mejor? –

0

¿Qué pasa con UIScrollView no funcionó para usted? Esa clase es bastante flexible, ...

+0

Tengo una vista de OpenGL para un juego y quería poder controlar la ventana gráfica de una manera similar a la de UIScrollView ... –

0

de Dave, veo que has respondidos a su propia pregunta con algo de código, pero, no estableciendo el siguiente le dará lo que necesita:

myScrollView.bounces = YES; 
myScrollView.pagingEnabled = YES; 
myScrollView.directionalLockEnabled = YES; 

En concreto, se Parece que ha vuelto a implementar directionLockEnabled. Quizás entender por qué no puedes usar UIScrollView es el problema más interesante :-)

+0

Ver mi comentario arriba. Estoy tratando de reproducir el comportamiento en un contexto donde UIScrollView no puede ir (o, al menos, no debería ir) –

+0

(Y: debo señalar que lo que hice NO es lo mismo que simplemente establecer algunas propiedades en una vista de desplazamiento. Si eso es lo que tenía que hacer, bueno, lo habría hecho. :-) –

+0

... y estoy interesado en qué es eso ;-) –

0

¡Esto es genial! Lo he usado en una aplicación donde mi vista desplazable equivale a un día de datos gráficos en un rango de 1902-2037, por lo que un UIScrollView no sería eficiente.

Cuestiones relacionadas