2010-02-18 13 views
2

J'ai plusieurs boutons que je veux activer de trois manières différentes.Comment obtenez-vous plusieurs boutons tactiles pour travailler avec touchesBegan/Moved?

  1. Touch Down
  2. Touch Down - toucher multiple (en même temps)
  3. Touch Drag Inside (La même chose que faisant glisser votre doigt sur un piano)

Les deux premiers est évidemment facile dans IB. Cependant, beaucoup de gens, y compris moi-même, ont eu des problèmes avec Touch Drag à l'intérieur. J'ai donc fini par utiliser - (void) touchesMoved [voir le code]. Cela fonctionne très bien pour le drag ... mais pour le faire fonctionner, j'ai dû désactiver les boutons "user Interaction" dans IB. Ce qui signifie que j'ai perdu les capacités "Touch Down" et multi-touch. Donc, pour que le "Touch Down" fonctionne, j'ai utilisé - (void) touchesBegan [voir code]. Cela fonctionne bien, mais je ne peux pas obtenir multi-touch pour travailler.

Est-ce que quelqu'un sait comment je peux allumer mes boutons simultanément pendant le multi-touch?
Ou ... Y a-t-il un moyen de faire bouger les touches et de faire fonctionner ensemble les fonctions des boutons dans IB?

J'ai essayé touch.view.multiTouchEnabled = Yes; et je me suis assuré que mes boutons sont multi-touch ok dans IB ... Mais rien.

Voici mon code. Merci beaucoup pour votre aide.

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event touchesForView:self.view] anyObject]; 

    CGPoint location = [touch locationInView:touch.view]; 

    if(CGRectContainsPoint(p1.frame, location)) 
    { 
     if (!p1.isHighlighted){ 
      [self pP01]; 
      [p1 setHighlighted:YES]; 
    } 
}else { 
     [p1 setHighlighted:NO]; 
    } 
    // 
    if(CGRectContainsPoint(p2.frame, location)) 
    { 
     if (!p2.isHighlighted){ 
      [self pP02]; 
      [p2 setHighlighted:YES]; 
     } 
    }else { 
     [p2 setHighlighted:NO]; 
    } 
    if(CGRectContainsPoint(p3.frame, location)) 
    { 
     if (!p3.isHighlighted){ 
      [self pP03]; 
      [p3 setHighlighted:YES]; 
     } 
    }else { 
     [p3 setHighlighted:NO]; 
    } 
} 

///

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
     UITouch *touch = [[event touchesForView:self.view] anyObject]; 
     CGPoint location = [touch locationInView:touch.view]; 

     if(CGRectContainsPoint(p1.frame, location)) 
     { 
      [self pP01]; 
      [p1 setHighlighted:YES]; 
     } 
     if(CGRectContainsPoint(p2.frame, location)) 
     { 
      [self pP02]; 
      [p2 setHighlighted:YES]; 
     } 
     if(CGRectContainsPoint(p3.frame, location)) 
     { 
      [self pP03]; 
      [p3 setHighlighted:YES]; 
     } 
} 

Répondre

2

Vous devez vérifier chaque contact au lieu d'une touche au hasard. Donc, for(UITouch *t in touches) au lieu de UITouch *touch = [touches anyObject]

+0

Ah bien sûr ... Merci. – Jonathan