2012-06-10 3 views
1

Je voudrais suivre les séquences tactiles séparées de touchesBegan à touchesMoved jusqu'au touchesEnded. Je reçois les coordonnées des événements tactiles simples, mais je voudrais savoir quel événement tactile correspond à laquelle séquence d'événements tactiles. Par exemple, si je déplace un premier doigt sur l'écran, puis touchez l'écran avec le second doigt, et retirez le premier doigt - Je veux afficher les coordonnées du premier doigt en couleur rouge et les coordonnées du deuxième doigt de couleur bleue.comment suivre les événements multitouch sur iphone?

Est-ce possible? Si oui, comment puis-je déterminer quels événements doivent être "rouges" et quels événements doivent être "bleus"?

Ceci est mon code:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self handleTouches:[event allTouches]]; 
} 
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self handleTouches:[event allTouches]]; 
} 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self handleTouches:[event allTouches]]; 
} 
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self handleTouches:[event allTouches]]; 
} 

- (BOOL)handleTouches: (NSSet*)touches { 
    for (UITouch* touch in touches) { 
     // ... 
    } 
} 

Répondre

6

Les objets tactiles sont cohérents à travers les événements, donc si vous vouliez suivre un rouge et un bleu touche, vous auriez un déclariez iVar pour chacun, quand la touche Commencez par assigner le toucher que vous voulez à ce ivar puis, dans votre boucle, vous vérifieriez si le toucher est le même que le pointeur que vous avez stocké.

UITouch *red; 
UITouch *blue; 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch* touch in touches) { 
     if(something) red = touch; 
     else blue = touch; 
    } 
} 
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self handleTouches:touches]; 
} 
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch* touch in touches) { 
     if(red == touch) red = nil; 
     if(blue == touch) blue = nil; 
    } 
} 
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch* touch in touches) { 
     if(red == touch) red = nil; 
     if(blue == touch) blue = nil; 
    } 
} 

- (BOOL)handleTouches: (NSSet*)touches { 
    for (UITouch* touch in touches) { 
     if(red == touch) //Do something 
     if(blue == touch) //Do something else 
    } 
} 
+0

Merci Emilio, j'apprécie! :) – johndodo

0

Pour ceux qui recherchent une solution générale pour le suivi de plusieurs touches, voir ma réponse here.

Le concept de base est de stocker chaque ID UITouch dans un tableau lorsque touchesBegan:: est appelé, puis de comparer chaque ID avec les touches à l'écran sur l'événement touchesMoved::. De cette façon, chaque doigt peut être associé à un seul objet et être suivi lors du panoramique. En faisant cela, chaque objet qui suit un contact peut afficher une couleur différente qui est ensuite affichée sur l'écran pour identifier différents doigts.

Questions connexes