2011-12-14 16 views
8

Ho 2 UIScrollViews che visualizzano un'immagine ciascuna (modalità panoramica e zoom). Posso scorrere in entrambe le viste già individualmente, ora voglio mantenere il punto centrale di entrambe le visualizzazioni in sincronia.Come sincronizzare lo scorrimento con più UIScrollViews?

Immagino che quando una delle viste sta creando eventi, ho bisogno di inoltrarli anche all'altra vista, semplicemente non riesco a scoprire quali funzioni sono rilevanti. Qualche suggerimento?

modifica: Se lo scorrimento parallelo in parallelo non è possibile, desidero almeno eseguire la sincronizzazione dopo un evento di scorrimento.

risposta

3

Questo non è specifico del requisito qui ma aiuta a sincronizzare scrollView tra classi diverse.

Per sincronizzare scrollViews tra diverse classi, utilizzare NSNotificationCenter per osservare per una notifica particolare.

Quando scorrimento si verifica quindi entro il -scrollViewDidScroll: metodo delegato, utilizzare NSNotificationCenter di inviare la notifica (con userInfo contenuto come scrollView.contentOffset.x & scrollView.contentOffset.y) esempio:

-(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]; 
} 

Registrati per questa notifica nella stessa classe o in qualsiasi altra classe ed esegui il metodo -setContentOffset: sullo scrollView/s che vuoi sincronizzare.
.
Esempio su Aggiunta Observer (sia in didLoad o init o dovunque adatto a voi nel maggior numero di classi a piacere):

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

.
esempio del metodo di selezione

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

[myOtherScrollView setContentOffset:CGPointMake(newX,newY)]; 
} 
Problemi correlati