Question

Je suis en train de mettre en œuvre un bouton rond comme le volume de contrôle. À l'heure actuelle, je peux détecter par le swipes Recognizer Gesture. Comment puis-je détecter un geste circulaire (dans le sens horaire et anti-horaire) sur le bouton? Merci!

Était-ce utile?

La solution

Vous cherchez un geste d'une seule touche (comme un curseur circulaire), ou un geste à deux touches (comme saisissant et en tournant un bouton dans le monde réel)? Dans ce dernier cas, jetez un oeil à UIRotationGestureRecognizer .

Si l'ancien, vous êtes à peu près sur votre propre. Vous pouvez certainement mettre en œuvre votre solution comme votre propre geste de reconnaissance personnalisé: ce devrait par Apple, et il y a de la documentation pour vous aider à démarrer (bien que je ne l'ai pas vu beaucoup d'exemples de travail là-bas). Voir aussi Comment la sous-classe correctement UIGestureRecognizer .

Comme une orientation générale, je pourrait penser de la région pour le geste comme une forme de beignet: une zone de centre c , rayon intérieur r1 , et le rayon extérieur r2 . Lorsque l'utilisateur touche vers le bas, vous pouvez calculer la distance entre c en utilisant le théorème de Pythagore, et l'angle avec votre fonction préférée TRIG. Avec cela, vous pouvez déterminer si le contact se trouve dans la zone. Comme l'utilisateur fait glisser, vous pouvez mettre à jour la valeur de commande en fonction de l'angle. À un moment donné, ils vont soit retouchent, ou faites glisser hors de la zone, et qui mettra fin à ce geste. Je suggère de permettre au toucher égarent assez loin dans r1 ou à l'extérieur de r2 :. Doigts sont des outils imprécis

Autres conseils

ne pas trouver une solution, et par l'inspiration logique de la réponse de @ Sixten, je suis allé et a créé quelque chose d'utile, ce n'est pas preuve de balle, mais il semble faire ce que je dois pour l'instant.

S'il vous plaît quelqu'un, fourche il, clone, l'utiliser, l'améliorer, il est open source, voici mon lien repo:

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

Avez-vous essayé d'écrire votre propre geste de reconnaissance? Il y a des instructions détaillées dans la documentation.

Le meilleur moyen serait de mettre en œuvre Recognizer Gesture sur mesure. Je ne sais pas si vous souhaitez détecter une Gesture discrète (méthode de gestion des événements serait appelé une fois que le cercle complet a été détecté) ou une POURSUIT Gesture (méthode de gestion des événements serait appelé à chaque fois que vous déplacez votre doigt sur une trajectoire circulaire).

Probablement, l'utilisateur ne peut pas dessiner un cercle parfait, et la solution fournie par @Sixten Otto serait bon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top