2009-07-30 4 views
1

Ich möchte erkennen, welcher Teil des Bildschirms berührt wird, wenn der Benutzer iPhone schüttelt.Multitouch Frage

Ich mache es auf folgende Weise:

-(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; 
     } 
    } 
} 

Alles funktioniert gut, wenn der Benutzer beide Hände entfernt, bevor eine weitere Shake zu machen, aber alles wird vermasselt, wenn ich beide Hände auf dem Bildschirm haben und einer von ihnen entfernen .

d. Ich schüttel mit beiden Händen auf den Bildschirm und danach will ich das iPhone mit nur einer Hand schütteln. In diesem Fall zählt der Shake nicht - als ob keine Berührungen auf dem Bildschirm wären. Ich nehme an, dass, wenn ich eine Hand vom Bildschirm entferne, beide "Berührungen" entfernt werden.

Was ist das Problem und wie kann ich es beheben?

Danke.

Antwort

2

Warum nummerieren Sie über -allTouches? Zählen Sie einfach über die touches Menge, die übergeben wird. Das gleiche gilt für beide Methoden.