2010-02-07 3 views
3

J'essaie de comprendre comment calculer où le scrollview va s'arrêter quand un utilisateur fait un geste de balayage et que la scrollview passe en décélération. J'essaie d'utiliser les fonctions de délégué, mais je ne peux pas le comprendre avec précision. S'il vous plaît aider!UIScrollView - Déterminer où s'arrêtera le parchemin

- (void) scrollViewDidScroll:(UIScrollView *)scrollView; 
- (void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; 
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView; 

Répondre

0

Il existe une variable pour l'accélération actuelle qui est conservée dans l'implémentation UIScrollView mais l'utiliser comme solution est impossible car vous ne pouvez pas compiler le code pour un périphérique.

0

Sons compliqués. L'utilisateur peut recommencer à défiler pendant qu'il décélère, l'arrêter soudainement ou pas. Peut-être que vous pouvez vous débrouiller avec DidEndDecelerating, c'est-à-dire simplement détecter la position lorsque le défilement est terminé?

+1

Je ne peux pas. Je dois comprendre quand "scrollViewWillBeginDecelerating" est appelé. – devinross

0

Il devrait être mathématique simple. La propriété contentOffset du scrollview est mise à jour à chaque appel de scrollViewDidScroll. Vous avez seulement besoin de sauvegarder le vecteur entre deux positions et l'heure pour obtenir au moins une position de fin de descente de la décélération.

Notez que l'utilisateur peut arrêter la décélération à tout moment en tapant sur le scrollview comme l'a souligné Jaanus.

+2

Plus facile dit alors fait. – devinross

2

Malheureusement UIScrollView ne fonctionne pas de cette façon - il n'y a pas moyen de le demander à l'avance où la décélération se termine.

3

Ce thread est un peu vieux, mais il vient tout en haut dans la recherche de ce problème.

Le protocole UIScrollViewDelegate contient la méthode suivante qui indique votre code où la vue de défilement devrait arrêter ...

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 

Le paramètre targetContentOffset est un inout donc si vous définissez une valeur différente, la scrollview s'arrêtera réellement au décalage spécifié.

+0

C'est en fait la bonne réponse – Toad