Question

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

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 retire les deux mains avant de faire un autre tremblement, mais tout se gâte si j'ai les deux mains sur l'écran et si j'en retire une.

i.e. Je serre les deux mains sur l'écran et ensuite je veux secouer l'iPhone d'une seule main. Dans ce cas, le shake ne comptera pas - comme s'il n'y avait aucune touche sur l'écran. Je suppose que, lorsque je retire une main de l’écran, les deux "touches" sont supprimés.

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

Merci.

Était-ce utile?

La solution

Pourquoi énumérez-vous sur -allTouches ? Il suffit d’énumérer sur le jeu de touches transmis. La même chose vaut pour les deux méthodes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top