2011-12-14 9 views
8

Tengo 2 UIScrollViews que muestran una imagen cada una (descripción general y modo de zoom). Puedo desplazar ambas vistas de forma individual, ahora quiero mantener el punto central de ambas vistas sincronizado.Cómo sincronizar desplazamiento con múltiples UIScrollViews?

Supongo que cuando una de las vistas crea eventos, necesito reenviarlos también a la otra vista, simplemente no puedo descubrir qué funciones son relevantes. ¿Algún consejo?

editar: Si el desplazamiento paralelo en vivo no es posible, quiero al menos sincronizar después de un evento de desplazamiento.

Respuesta

3

Esto no es específico del requisito aquí pero ayuda a sincronizar scrollViews entre diferentes clases.

Para sincronizar scrollViews entre diferentes clases, use NSNotificationCenter para observar una notificación en particular.

Cuando desplazamiento se produce entonces dentro de la -scrollViewDidScroll: método delegado, utilice NSNotificationCenter para publicar la notificación (con userInfo contenidos como scrollView.contentOffset.x & scrollView.contentOffset.y) Ejemplo:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc]init]; 
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.x] 
      forKey:@"offsetX"]; 
[userInfo setObject:[NSNumber numberWithFloat:scrollView.contentOffset.y] 
      forKey:@"offsetY"]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"scrollSync" 
             object:nil 
             userInfo:userInfo]; 
} 

Regístrese para esta notificación en la misma clase o en cualquier otra clase y realice el método -setContentOffset: en los scrollView/s que desea sincronizar.
.
Ejemplo de adición de Observador (ya sea en didLoad o init o en cualquier lugar adecuado para usted en tantas clases como desee):

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleNotification:) 
             name:@"scrollSync" object:nil]; 

.
Ejemplo del Método de selección

-(void)handleNotification:(NSNotification *)sender 
{ 
float newX = [[sender.userInfo objectForKey:@"offsetX"] floatValue]; 
float newY = [[sender.userInfo objectForKey:@"offsetY"] floatValue]; 

[myOtherScrollView setContentOffset:CGPointMake(newX,newY)]; 
} 
Cuestiones relacionadas