2010-12-16 264 views
0

Pour l'expérimentation j'ai un UIViewController et une fenêtre personnalisée qui intercepte les événements tactiles, de sorte que je puisse faire glisser et feuilleter différents UIViews autour de l'écran. Il y a 3 types d'événements que je gère: UITouchPhaseBegan et UITouchPhaseMoving (où je déplace simplement le sous-UIView selon la coordonnée tactile) et UITouchPhaseEnded (où j'applique une force à l'UIView pour le faire bouger à travers l'écran, ralentissant avec friction). La façon dont je calcule la force à appliquer lors de la fin d'un événement tactile consiste à calculer le vecteur de direction entre les derniers emplacements tactiles (depuis UITouchPhaseMoving) et actuels (depuis UITouchPhaseEnded), mais il ne semble pas me donner les résultats que je veux. Lorsque je bouge la vue et que je soulève doucement mon doigt de l'écran, il se déplace bien, mais lorsque je bouge le mouvement vers la fin, il ne bouge pas aussi loin que prévu. En effet, même si je le déplace sur l'écran pendant quelques images, le mouvement saccadé à la fin rend les coordonnées des derniers événements tactiles proches et proches, donc je ne calcule pas la force totale.Comment un UIScrollView défile-t-il si bien avec un mouvement flicky/saccadé?

Désolé pour le texte long, mais j'ai remarqué que les vues telles que UIScrollView défilent toujours correctement même avec ce mouvement saccadé/flicky; est-ce parce que la force finale est calculée sur un certain nombre de trames, plutôt que seulement sur les trames les plus récentes et actuelles? Si tel est le cas, quelqu'un connaît-il le fonctionnement interne de la scrollview qui lui permet de fonctionner si bien même avec un mouvement flicky/saccadé?

Répondre

1

Je ne connais pas le fonctionnement interne, mais je suppose qu'il calcule un vecteur de force en prenant les coordonnées de contact et le temps, et les coordonnées de libération et le temps. une fois qu'il a cela, en lui appliquant une décélération, par inertie. Je pense que cela pourrait être quelque chose qui est très difficile à obtenir, et Apple a passé beaucoup de temps à le peaufiner, même à la vitesse du rebond quand il atteint ses limites. Certainement une expérience intéressante.