2012-02-25 17 views
5

Tengo un UIScrollView cuyo tamaño de contenido es 1200x480. Tengo algunas vistas de imagen, cuyo ancho suma 600. Cuando me desplazo hacia la derecha, simplemente aumento el tamaño del contenido y establezco el desplazamiento para que todo sea uniforme (luego quiero agregar otras imágenes, pero eso no es importante) ahora mismo). Entonces, básicamente, las imágenes que se encuentran actualmente en la ventana gráfica permanecen en algún lugar a la izquierda, y eventualmente se eliminarán de la supervista.Desplazamiento horizontal infinito UIScrollView

Ahora, el problema que tengo sucede cuando se desplaza hacia la izquierda. Lo que hago es mover las imágenes al final del tamaño del contenido (así que agregue 600 al origen de la vista de imagen .x), y luego configure el desplazamiento del contenido en consecuencia. Funciona cuando el dedo está en la pantalla y el usuario arrastra (scrollView.isTracking = YES). Cuando el usuario se desplaza hacia la izquierda y suelta (scrollView.isTracking = NO), las vistas de la imagen terminan moviéndose demasiado rápido hacia la derecha y desaparecen casi al instante. ¿Alguien sabe cómo puedo hacer que las imágenes se muevan bien y no desaparezcan incluso cuando el usuario no está arrastrando manualmente la vista y ya la ha soltado?

Aquí está mi código para arrastrar horizontalmente:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGPoint offset = self.scrollView.contentOffset; 
    CGSize size = self.scrollView.contentSize; 

    CGPoint newXY = CGPointMake(size.width-600, size.height-480); 

    // this bit here allows scrolling towards the right 
    if (offset.x > size.width - 320) { 
     [self.scrollView setContentSize:CGSizeMake(size.width+320, size.height)]; 
     [self.scrollView setContentOffset: offset]; 
    } 

    // and this is where my problem is: 
    if (offset.x < 0) { 
     for (UIImageView *imageView in self.scrollView.subviews) { 
      CGRect frame = imageView.frame; 
      [imageView setFrame:CGRectMake 
       (frame.origin.x+newXY.x, frame.origin.y, 200, frame.size.height)]; 
     } 
     [self.scrollView setContentOffset:CGPointMake(newXY.x+offset.x, offset.y)]; 
    } 
} 

EDIT: Esto está ahora trabajando - Yo tenía un vistazo a StreetScroller y todo está bien ahora.

Sin embargo, ahora quiero acercar la vista de desplazamiento, pero nunca se invoca viewForZoomingInScrollView. ¿No es posible hacer zoom en una vista de desplazamiento con un gran tamaño de contenido?

+0

¿Alguien, por favor? :) –

Respuesta

5

Hay algunos enfoques que flotan por aquí. Simplemente use la búsqueda del sitio ...

Si desea un ejemplo más "oficial" creado por Apple, eche un vistazo al StreetScroller Demo. Para obtener más información sobre este ejemplo, eche un vistazo a los últimos años de la sesión WWDC no. 104 Técnicas avanzadas de vista de desplazamiento.

También hay una subclase UIScrollView en Github llamada BAGPagingScrollView, que está localizando & infinita, pero tiene algunos errores que hay que solucionar por su cuenta, porque no es bajo desarrollo activo (especialmente el método goToPage: conduce a problemas) .

+0

Gracias :) Eché un vistazo a StreetScroller y funciona sin problemas con solo usar el método recenterIfNecessary. –

+0

¡Me alegro de eso! – dom

+0

Gracias :) Quiero acercar mi scrollview, pero viewForZoomingInScrollView nunca se llama. Tengo userInteractionEnabled establecido en YES. –

Cuestiones relacionadas