2011-02-07 23 views
6

estoy usando un UIScrollView como la base de un componente que hace uso de la animación núcleo. Cuando el usuario desliza la vista, me gustaría colocar los elementos según la posición de destino (reposo) de la vista de desplazamiento. Para esto, necesito calcular el contentOffset destino de UIScrollView en el método scrollViewWillBeginDecelerating: o similar.Cómo calcular el destino de un contentOffset UIScrollView en movimiento

La razón que necesito esto es que voy a estar utilizando el contentOffset destino para animar vistas anidadas dentro de la contentView ScrollView a su posición final. Por supuesto, podría configurar un observador en contentOffset o similar, pero esto daría como resultado una animación caótica, ya que las vistas anidadas actualizarían sus posiciones varias veces durante la desaceleración. Me gustaría que esto suceda solo una vez.

¿Hay una manera simple de hacer esto?

+2

Parece que alguien más tiene esta necesidad también: http://stackoverflow.com/questions/1651560/predicting-the-resting-offset-in-a-uiscrollview-after-deceleration – Tricky

Respuesta

0

¿Hay una razón específica por lo que necesita saber de antemano donde la vista de desplazamiento va a parar? Puede colocar sus vistas en layoutSubviews (si subclase UIScrollView) o en scrollViewDidScroll: en la implementación del delegado de la vista de desplazamiento.

+1

Hola, sí existe . Utilizaré la posición para animar las vistas anidadas en contentView de scrollview a su posición final. Por supuesto, podría configurar un observador en contentOffset o similar, pero esto daría como resultado una animación caótica, ya que las vistas anidadas actualizarían sus posiciones varias veces durante la desaceleración. – Tricky

0

Creo que se refiere al comportamiento proporcionado automáticamente por pagingEnabled en UIScrollView. Desde iOS Reference Library en UIScrollView, cuando la búsqueda está activada, "la vista de desplazamiento se detiene en los múltiplos de los límites de la vista de desplazamiento cuando el usuario se desplaza". Uso este comportamiento todo el tiempo, y creo que es lo que estás describiendo. Se ocupa de todo el trabajo duro para usted, ¡simplemente estableciendo una propiedad!

ACTUALIZACIÓN: Creo que he entendido mal su pregunta. Siempre puede verificar la propiedad contentOffset del UIScrollView para determinar su origen actual dentro de la vista de desplazamiento. Puede hacerlo en uno de los métodos delegados, probablemente scrollViewDidEndDecelerating:.

+0

Sí, puede obtener el contentOffset actual, pero necesito el contentOffset de destino ... – Tricky

+0

¿Cómo puede saber el contentOffset final hasta que la vista de desplazamiento se mueva? – rcw3

1

Hay un método delegado para esto:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS5(5_0); 

De acuerdo con el documento:

Llamado en el dedo hacia arriba si el usuario arrastró. la velocidad está en puntos/segundo. targetContentOffset se puede cambiar para ajustar dónde queda la vista de desplazamiento. No se llama cuando pagingEnabled es SÍ

0

No estoy seguro de si todavía necesita esto. pero así es como puedes ingresar al delegado de UIScrollView.

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ 
NSLog(@"X offset: %f", targetContentOffset->x); 
NSLog(@"Y offset: %f", targetContentOffset->y); 
} 
Cuestiones relacionadas