2010-09-29 25 views
0

J'ai utilisé des touches pour commencer à suivre jusqu'à 8 touches, et chacune déclenche un événement. Ces touches peuvent se produire en même temps ou décalées.XCode - touchBegan - Touches récentes/nouvelles touches

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"Touch Began"); 
    NSSet *allTouches = [event allTouches]; 

    for (int i=0; i<allTouches.count; i++) { 
     UITouch *touch = [[allTouches allObjects] objectAtIndex:i]; 
     if (/*touch inside button in question*/) { 
      //Trigger the event.  
     } 
    } 
} 

Ce code fonctionne pour le multitouch, et il n'a pas de problème, SAUF: (Voyez si vous pouvez le deviner)

En raison des travaux de façon allTouches, il se fait littéralement toutes les touches. Pour cette raison, il boucle toutes les touches qui sont actuellement actives lorsque l'utilisateur commence une autre touche, et déclenche ainsi l'événement de l'un des boutons deux fois. Ex: Johnny appuie sur le bouton 1. L'événement 1 se produit. Johnny laisse son doigt sur le bouton 1, et appuie sur le bouton 2. L'événement 2 se produit, mais le bouton 1 fait toujours partie de allTouches, et ainsi, l'événement 1 est à nouveau déclenché.

Alors, voici la question: Comment obtenir la nouvelle touche?

Répondre

0

Le même objet tactile sera renvoyé lors d'appels ultérieurs à touchesBegan pour tout contact continu. Il suffit donc de sauvegarder chaque touche UITouch * que vous avez déjà traitée comme commencée (et pas encore terminée), et comme vous répéterez la prochaine fois dans touchesBegan, ignorez celles que vous avez enregistrées/enregistrées.

+0

Perfet! Merci beaucoup! –