2009-04-05 11 views
7

Tengo un UIScrollView con imágenes en él. Cuando el usuario llegue a la última imagen y pase el dedo por la siguiente imagen, quiero mostrar la primera. De manera similar, cuando el usuario está en la primera imagen y se desliza por la imagen anterior, quiero mostrar la última imagen. En resumen, será un tipo circular de una cosa.Circular UIScrollView

¿Cómo puedo implementar esto?

Respuesta

6

Deberá trabajar con contentOffset y contentSize.

Cada vez que hay un evento de desplazamiento, puede considerar comprobar si el usuario está en say currentLength - 1, y si es así, agregar dinámicamente una imagen a la vista de desplazamiento.

Esto debería funcionar para ser 5, aunque podría ocasionarle problemas en términos de memoria si no lanza las imágenes anteriores.

No creo que esta solución funciona con imágenes menos de índice 0.

Alternativamente ... Digamos que tiene imágenes I1 a I5. Disposición a una vista de desplazamiento con las siguientes imágenes: I5 I1 I2 I3 I4 I5 I1

Autoscroll a I1 (altura de I5), sin animación.

Si el usuario alguna vez se desplaza por encima de esta marca, desmarque automáticamente (sin animación) hasta el segundo par I5 I1. Si el usuario intenta desplazarse por debajo de I5 cerca del final, puede desplazarlo automáticamente al primer par I5 I1. Si se desplaza sin animación, y a la altura correcta, parecerá que las imágenes son infinitas.

No estoy seguro si esto será muy sensible, pero podría dar el efecto que está buscando.

+0

Eso es más o menos lo que hice en una de mis aplicaciones. Funciona bien. –

+3

Esto no funciona si necesita que el movimiento de la vista sea continuo. A menos que puedas desplazarte a algún lugar con una velocidad específica. – Dimitris

+0

Esta solución funciona bien con paginación habilitada. – redent84

2

La clave es darse cuenta de que un UIScrollView es muy inteligente sobre lo que redibuja.

Puede mover sus subvistas y mientras las vistas visibles en la pantalla no se muevan o cambien, no hay redibujado. Puede restablecer el marco de cualquier subvistas fuera de pantalla (y si es necesario ajustar el contentOffset) sin causar un redibujado.

Por supuesto, tener la paginación habilitada hace que esto sea mucho más fácil, pero estoy seguro de que podría hacerlo desde didScroll también.

Debe generar sus 5 vistas agréguelos como subvistas y establezca el desplazamiento de la vista de desplazamiento en el centro de las cinco. A medida que scrollView se desplaza, puede cambiar las subvistas, como un round robin. No es necesario eliminar y volver a agregar las subvistas, solo puede restablecer los marcos.

Esto es (en un nivel simple) cómo funciona una UITableView también: reutiliza un pequeño conjunto de vistas de celda y sigue restableciendo el desplazamiento de contenido.