2009-07-30 11 views
1

Je veux détecter, quelle partie de l'écran est touchée, lorsque l'utilisateur secoue l'iPhone.Multitouch question

je le fais de la manière suivante:

-(void) accelerometer: (UIAccelerometer*)accelerometer didAccelerate: (UIAcceleration*)acceleration 
{ 
    float shakeStrength = sqrt(acceleration.x * acceleration.x + acceleration.y * acceleration.y + acceleration.z * acceleration.z); 

    if (shakeStrength >= 1.5f) 
    { 
     if (isLeftHandTouches && isRightHandTouches) 
     { 
      DebugLog(@"both hands shake"); 
     } else if (isLeftHandTouches) 
     { 
      DebugLog(@"left hand shake"); 
     } else if (isRightHandTouches) 
     { 
      DebugLog(@"right hand shake"); 
     } 
    } 
} 

-(void) touchesBegan: (NSSet *)touches withEvent: (UIEvent *)event 
{ 
    NSSet *allTouches = [event allTouches]; 

    for (int i = 0; i < [allTouches count]; i++) 
    { 
     if ([ [ [allTouches allObjects] objectAtIndex: i] locationInView: [self view] ].x <= 240.0f) 
     { 
      isLeftHandTouches = YES; 
     } else 
     { 
      isRightHandTouches = YES; 
     } 
    } 
} 

-(void) touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event 
{ 
    NSSet *allTouches = [event allTouches]; 

    for (int i = 0; i < [allTouches count]; i++) 
    { 
     if ([ [ [allTouches allObjects] objectAtIndex: i] locationInView: [self view] ].x <= 240.0f) 
     { 
      isLeftHandTouches = NO; 
     } else 
     { 
      isRightHandTouches = NO; 
     } 
    } 
} 

Tout fonctionne bien si l'utilisateur supprime les deux mains avant de faire une autre secousse, mais tout est foiré si j'ai les deux mains sur l'écran et supprimer l'un d'eux . C'est-à-dire que je secoue les deux mains sur l'écran et que, par la suite, je veux agiter l'iPhone d'une seule main. Dans ce cas, le tremblement ne compte pas - comme s'il n'y avait pas de touches sur l'écran. Je suppose que lorsque je retire une main de l'écran, les deux «touches» sont supprimées.

Quel est le problème et comment puis-je le réparer?

Merci.

Répondre

2

Pourquoi avez-vous énuméré plus de -allTouches? Il suffit d'énumérer l'ensemble touches qui est transmis. Il en va de même pour les deux méthodes.