2011-02-07 8 views
6

Utilizzo un UIScrollView come base di un componente che utilizza l'animazione core. Quando l'utente fa scorrere la vista, vorrei posizionare gli elementi in base alla posizione di destinazione (a riposo) della vista di scorrimento. Per questo, ho bisogno di calcolare il contentOffset di destinazione di UIScrollView nel metodo scrollViewWillBeginDecelerating: o simile.Come calcolare il contenuto di destinazioneOffset di un UIScrollView in movimento

Il motivo per cui ho bisogno di questo è che userò il contentOffset di destinazione per animare le viste annidate all'interno del contenutoViewView della scrollview alla loro posizione finale. Ovviamente potrei impostare un osservatore su contentOffset o simile, ma questo risulterebbe in un'animazione caotica, in quanto le viste nidificate aggiornerebbero le loro posizioni più volte durante la decelerazione. Mi piacerebbe che succedesse solo una volta.

C'è un modo semplice per farlo?

+2

Sembra che qualcun altro ha questa esigenza anche: http://stackoverflow.com/questions/1651560/predicting-the-resting-offset-in-a-uiscrollview-after-deceleration – Tricky

risposta

0

Esiste un motivo specifico per cui è necessario sapere in anticipo dove si fermerà la visualizzazione a scorrimento? È possibile posizionare le proprie viste in layoutSubviews (se si sottoclassi UIScrollView) o in scrollViewDidScroll: nella visualizzazione a scorrimento dell'implementazione del delegato.

+1

Ciao, sì, c'è . Userò la posizione per animare le viste nidificate all'interno del contentView della scrollview fino alla loro posizione finale. Ovviamente potrei impostare un osservatore su contentOffset o simile, ma questo risulterebbe in un'animazione caotica, in quanto le viste nidificate aggiornerebbero le loro posizioni più volte durante la decelerazione. – Tricky

0

Credo che ci si riferisca al comportamento fornito automaticamente da pagingEnabled su UIScrollView. Dasu UIScrollView, quando il paging è abilitato, "la vista di scorrimento si ferma su multipli dei limiti della vista di scorrimento quando l'utente scorre". Uso sempre questo comportamento, e credo sia quello che stai descrivendo. Gestisce tutto il duro lavoro per te - solo impostando una proprietà!

UPDATE: Penso di aver frainteso la tua domanda. È sempre possibile verificare la proprietàdi UIScrollView per determinare la sua origine corrente all'interno della visualizzazione di scorrimento. Puoi farlo in uno dei metodi delegati, probabilmente scrollViewDidEndDecelerating:.

+0

Sì, è possibile ottenere il contenuto correnteOffset, ma ho bisogno del contenuto di destinazioneOffset ... – Tricky

+0

Come si può sapere il contenuto finaleOffset fino a quando la scrollview non si muove? – rcw3

1

C'è un metodo delegato per questo:

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

Secondo il doc:

Chiamato il dito verso l'alto se l'utente ha trascinato. la velocità è in punti/secondo. targetContentOffset può essere modificato per regolare dove si ferma la visualizzazione a scorrimento. non chiamato quando pagingEnabled è SI

0

Non so se è ancora necessario. ma è così che puoi entrare nel delegato di UIScrollView.

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