UIScrollView con desplazamiento “Circular”

Estoy intentando hacer “Circular” desplazándose en mi UIScrollView, pero sin éxito.

Lo que quiero hacer: si uiscrollview llega a su fin, debería moverse para comenzar si se visualiza al inicio y retrocede, debe moverse hacia el final

Adjuntar scrollview no es bueno en mi situación (otros métodos deberían tener “id de página”)

¿Tienes alguna idea?

Implementé este método, pero requiere paginación habilitada . Supongamos que tiene cinco elementos A,B,C,D and E Cuando configura su vista, agrega el último elemento al principio y el primer elemento hasta el final, y ajusta el desplazamiento del contenido para ver el primer elemento, como este E,[A],B,C,D,E,A En UIScrollViewDelegate, compruebe si el usuario llega a alguno de los extremos y mueva el desplazamiento sin animación al otro extremo.

Imagine que [] indica que se muestra la vista:

 E,A,B,C,[D],E,A 

El usuario se desliza hacia la derecha

 E,A,B,C,D,[E],A 

El usuario se desliza hacia la derecha

 E,A,B,C,D,E,[A] 

A continuación, establezca automáticamente el desplazamiento de contenido en el segundo elemento

 E,[A],B,C,D,E,A 

De esta manera, el usuario puede deslizar en ambos sentidos creando la ilusión de un desplazamiento infinito.

 E,A,[B],C,D,E,A 

Actualizar

He subido una implementación completa de este algoritmo. Es una clase muy complicada, porque también tiene la opción de hacer clic, desplazamiento circular infinito y reutilización de celda. Puede usar el código como está, modificarlo o extraer el código que necesita. El código más interesante está en la clase TCHorizontalSelectorView .

Enlace al archivo

¡Disfrútala!


Actualización 2

UICollectionView es ahora la forma recomendada de lograr esto y se puede utilizar para obtener el mismo comportamiento. Este tutorial describe en detalle cómo lograrlo.

Apple tiene una demo de Street Scroller que parece tener exactamente lo que quieres.

También hay un video de WWDC 2011 que muestra su demo. 😉 Cubren el desplazamiento infinito primero en el video.

Intenta usar el siguiente código …

Código de muestra..

 - (void)scrollViewDidEndDecelerating:(UIScrollView *)sender { if (scrollView.contentOffset.x == 0) { // user is scrolling to the left from image 1 to image n(last image). // reposition offset to show image 10 that is on the right in the scroll view [scrollView scrollRectToVisible:CGRectMake(4000,0,320,480) animated:NO];// you can define your `contensize` for scrollview } else if (scrollView.contentOffset.x == 4320) { // user is scrolling to the right from image n(last image) to image 1. // reposition offset to show image 1 that is on the left in the scroll view [scrollView scrollRectToVisible:CGRectMake(320,0,320,480) animated:NO]; } } 

Espero que esto te ayudará…