Pregunta

Quiero detectar qué parte de la pantalla se toca cuando el usuario sacude el iPhone.

Lo hago de la siguiente manera:

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

Todo funciona bien si el usuario quita ambas manos antes de hacer otra sacudida, pero todo se estropea si tengo ambas manos en la pantalla y quito una de ellas.

es decir Agito con ambas manos en la pantalla y luego quiero sacudir el iPhone con solo una mano. En este caso, el batido no contará, como si no hubiera toques en la pantalla. Supongo que cuando quito una mano de la pantalla, ambos "tocan" están siendo eliminados.

¿Cuál es el problema y cómo puedo solucionarlo?

Gracias.

¿Fue útil?

Solución

¿Por qué enumera sobre -allTouches ? Simplemente enumere sobre el conjunto touch que se pasa. Lo mismo ocurre con ambos métodos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top