2010-02-25 5 views
3

J'utilise TouchesBegan TouchesMoved avec Multitouch.TouchesBegan et TouchesEnded avec le numéro Multitouch

J'ai une implémentation manuelle de ce qui est essentiellement un bouton. Je borne le test sur le point de TouchesBegan pour mettre le bouton en bas et le même chose pour TouchesEnded de le réinitialiser. Le problème est que si l'utilisateur déplace le doigt hors des limites du bouton avant de le soulever, le TouchesEnded est en dehors des limites du bouton où le contact a commencé.

Je ne peux pas simplement tout réinitialiser sur touchended car l'utilisateur peut encore maintenir un autre bouton enfoncé avec un autre doigt.

Quelle est la solution recommandée? UIButton doit faire quelque chose de similaire en quelque sorte.

+0

Que voulez-vous dire par tout réinitialiser? Votre classe de boutons maintient-elle l'état tactile {isTouched, isReleased} ou un autre "contrôleur" qui maintient l'état de contact? –

+0

@AZ J'ai un drapeau qui suit quand mon "bouton" est enfoncé ou pas. Je pourrais utiliser TouchesEnded pour réinitialiser tous les drapeaux (sur tous les boutons) mais alors les gens ne pourraient pas maintenir un bouton enfoncé tout en libérant un autre – PeanutPower

Répondre

3

Vous devez regarder touchesMoved: et "désactiver" votre bouton lorsque le toucher se déplace en dehors de ses limites, et "réactiver" votre bouton lorsque le toucher revient en arrière. Voir Handling a Complex Multi-Touch Sequences pour l'explication de la façon de surveiller les mutations sur un séquence multi-touch (façon élégante de dire "quel doigt était-ce?")

+0

ahh merci c'est ce que je cherchais. Ils utilisent donc un dictionnaire pour contenir les informations tactiles. – PeanutPower

+2

J'insiste sur l'avertissement d'Apple de ne pas utiliser un NSDictionary, mais un CFDictionaryRef à la place. Vous avez la maintenance sur le code de tiers avec ce bug. –