2011-10-24 8 views
6

Tengo horizontal UIScrollview configurado (lo que significa que no se desplaza hacia arriba y hacia abajo sino uno que solo se desplaza de izquierda a derecha) y al iniciar la aplicación, quiero que esta vista deslizante se desplace hacia la izquierda, luego a la derecha "demostrando" su capacidad de desplazamiento - y finalmente luego se detiene, dejando que el usuario tome el control y controle el desplazamiento manualmente con el dedo. Todo funciona, excepto para este demo de carga y descarga de izquierda a derecha.¿Cómo fuerza forzosamente un pergamino mediante UIScrollView?

no estoy usando el Interface Builder para nada de esto, estoy haciendo todo con código:

//(this is in viewDidLoad:) 
// Create the scrollView: 
UIScrollView *photosScroll = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320, 200)]; 
[photosScroll setContentSize: CGSizeMake(1240, 200)]; 
// Add it as a subview to the mainView 
[mainView addSubview:photosScroll]; 


// Set the photoScroll's delegate: 
photosScroll.delegate = self; 

// Create a frame to which to scroll: 
CGRect frame = CGRectMake(10, 10, 80, 150); 
// Scroll to that frame: 
[photosScroll scrollRectToVisible: frame animated:YES]; 

Así que las cargas ScrollView éxito y estoy capaz de desplazarse de izquierda a derecha con el dedo - pero no hace este "auto-scroll" como esperaba que fuera.

  • Traté de llamar a la scrollRectToVisible antes y después de la adición de la ScrollView como subvista - no funcionó.
  • ¿Pensando que esto debería ocurrir en en loadView y no en viewDidLoad? Pero si es así, ¿cómo?

¿Alguna idea?

Respuesta

5

Un par de maneras de hacer esto:

  1. Uso scrollRectToVisible:animated: por un valor de cero X y luego una positiva son más bien tirando, luego otra vez de nuevo a su punto medio. Puede llamar al método después de agregar la vista de desplazamiento como una subvista (probablemente también antes, pero lo mejor es estar seguro). Tendrá que calcular qué valor de X está fuera de la pantalla a la izquierda con su contentSize y conocer el ancho de sus diversos elementos dentro de la vista de desplazamiento.
  2. Dado que solo está haciendo una animación rápida y le dará control al usuario, esta puede ser realmente una animación rápida y sucia, por lo que podría usar setContentOffset:animated: para forzar que el contenido de la vista deslizante se mueva con respecto a su vista actual posición. Mueva los elementos hacia la derecha para un desplazamiento hacia la izquierda (valor X positivo), luego déjelos dos veces más lejos para un desplazamiento hacia la derecha (valor X negativo), luego ajuste el desplazamiento a cero.

No debe poner ninguno de estos en viewDidLoad o loadView; póngalos en viewDidAppear, que es después de que su vista de desplazamiento se dibuja realmente en la pantalla. ¡Solo te importan las animaciones cuando el usuario puede verlas!

+0

¿te refieres a algo como esto? Marco CGRect = CGRectMake (800, 0, 800, 150); [photosScroll scrollRectToVisible: frame animated: YES]; frame = CGRectMake (0, 0, 800, 150); [photosScroll scrollRectToVisible: frame animated: YES]; porque eso no funcionó ... – sirab333

+0

Para el n. ° 1, sí, pero no es necesario hacer que el "marco" se desplace al tamaño de la vista completa. Puede hacer 'CGRectMake (800, 0, 1, 1)' si lo desea, y luego 'CGRectMake (0, 0, 1, 1)'. Para desplazar el área de 800 píxeles a 1600 píxeles, puede desplazarse a '(1599, 0, 1, 1)' y, a continuación, para desplazar el área de 0 a 800 a la vista, puede desplazarse a '(0 , 0, 1, 1) '. – darvids0n

+0

oh ok, déjame probar esto en viewDidAppear ... – sirab333

Cuestiones relacionadas