2009-09-08 4 views
2

Je veux savoir quand un utilisateur touche l'écran mais ne bouge pas. Le faire de manière pseudo est assez simple - je sais combien de touches j'ai juste en utilisant touchesBegan et touchEnded, mais le problème est que seulement touchesMoved envoie des événements. Aucun événement n'est envoyé si vous ne sont pas en mouvement. Ceci est utilisé pour avoir un joli défilement coulissant - vous pouvez lancer le défilement et il continuera à défiler même après que vous l'ayez relâché, mais il s'arrêtera immédiatement si votre doigt est abaissé mais ne bouge pas. Je ne peux pas simplement définir un fingerDown boolean dans les touchesMoved et ensuite le définir false dans ma boucle (où le scrolling et le glissement se produisent), car ils ne sont pas synchronisés.iPhone comment savoir quand l'utilisateur touche l'écran mais ne bouge pas?

Fondamentalement, je veux simuler avoir un événement touchesNotMoved - quand vous vous déplacez, un certain bool est vrai, quand vous ne bougez pas, c'est faux.

De plus, ne me demandez pas pourquoi je n'utilise pas seulement le défilement d'Apple - il y a une bonne raison qui n'a rien à voir avec cette question. :-)

Répondre

1

Ce n'est pas la réponse à savoir quand les touches ne sont pas actives, mais est une solution raisonnable à ce que je voulais faire, de toute façon.

Donc, si quelqu'un d'autre est en train de simuler des vues de défilement d'Apple (le défilement de pixel parfait, plus une belle aventure et toboggan), alors vous voulez les éléments suivants:

Une piste de maintien entier du nombre de touches.
Une boucle ou une minuterie distincte des événements tactiles.
Un vecteur (ou deux flotteurs) stockant une quantité de "décroissance" de défilement.
Valeur de décroissance constante du flotteur, comme 0,95.

Ensuite, avec ceux que vous pouvez faire ce qui suit:
- Dans touchesBegan, incrémenter touchCount par [nombre touches].
- Dans TouchesEnded, décrémentez touchCount par [nombre de touches].
- Dans touchesMové, créez un vecteur qui représente currentTouchPos - previousTouchPos.
- Faites défiler votre vue par ce vecteur.
- Définissez votre vecteur scrollDecay égal à ce vecteur.
- Dans votre minuterie principale ou boucle, faites défiler votre vue par le scrollDecay seulement si touchCount < = 0. En outre, multipliez le vecteur scrolLDecay par la valeur de décroissance. Une fois qu'il atteint une valeur très faible (disons 0,1), mettez-le à 0.

Et vous avez terminé. Cela fonctionne plutôt bien, je ne vois pas de différences perceptibles entre le défilement d'Apple et celui-ci.

+0

Intéressant. Vous avez juste besoin de gérer le "rebond" sur les bords et les indicateurs de défilement et vous avez à peu près cloné le comportement de UIScrollView d'Apple – rpetrich

+0

Vrai, cette méthode manque en effet dans le joli rebond, et elle ne va pas non plus passé les bords si vous faites glisser supplémentaire. – Eli