2009-01-20 4 views
0

J'ai été plusieurs fois sur le Guide de programmation iPhone concernant le comportement de quand les méthodes d'événement sont appelées dans une application. De ce que dit le guide: touchesBegan est appelé quand un doigt touche l'écran.Comportement Cocoa Touch pour les événements

touchesMoved est appelée lorsqu'un doigt sur l'écran se déplace.

touchesEnded est appelée lorsqu'un doigt se lève de l'écran.

La question devient un peu assombri avec plusieurs doigts sont impliqués:

Même avec le drapeau d'interaction multi-touch sur NON, l'application continue d'appeler la méthode touchesBegan d'une vue qui est actuellement le suivi une autre touche. Cela semble contre-intuitif pour moi.

Est-ce le comportement correct? Je pense qu'un nouveau UITouch (même ajouté à l'événement en cours de suivi) ne déclencherait pas la méthode touchesBegan. De noter, j'ai mis ce drapeau dans IB aussi bien que par programme pour m'assurer que quelque chose ne me manquait pas.

Merci, Corey

Répondre

0

Je compris mon problème, mais d'abord de clarifier la fonctionnalité correcte de plusieurs touches:

Si le drapeau multipleTouchEnabled de votre point de vue est réglé sur NO, la méthode touchesBegan de ce point de vue ne devrait pas tirer si un second contact est appliqué à un écran.

Avec cela, la solution à mon problème:

Mon point de vue contient plusieurs sous-vues. La vue est responsable de la manipulation des touches pour elle-même et les sous-vues.

Lorsque mon code ne fonctionnait pas correctement, j'avais le paramètre userInteractionEnabled = YES de la sous-vue. Cela signifiait que quand une sous-vue était touchée, elle transmettait le contact à la vue principale, INDÉPENDAMMENT de savoir si la vue supérieure suivait une autre touche. En d'autres termes, bien que UIApplication respecte le drapeau multiTouchEnabled d'une vue, les autres vues de la chaîne répondeur ne le font pas.

0

Oui je crois qu'il est un comportement correct. Vous pouvez suivre l'emplacement de chaque événement touche donc je pense que vous avez juste besoin de structurer votre logique telle que vous gérez:

UITouch *touch = [[allTouches allObjects] objectAtIndex:0]; 

pour obtenir le premier contact, et objectAtIndex: 1 pour le second. Je pense qu'il va jusqu'à quatre ou cinq (pas sûr, s'il vous plaît voir les docs).

Bonne chance!

Questions connexes