Pergunta

Quero detectar, que parte da tela é tocada quando o usuário sacode iPhone.

Eu faço isso da seguinte maneira:

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

Tudo funciona bem se o usuário remover as duas mãos antes de fazer outro shake, mas tudo ficará confuso se eu tiver as duas mãos na tela e remover uma delas.

ou seja, tremi com as duas mãos na tela e depois quero agitar o iPhone com apenas uma mão. Nesse caso, o shake não conta - como se não houvesse toques na tela. Suponho que, quando removo uma mão da tela, os dois "toques" estão sendo removidos.

Qual é o problema e como posso corrigi -lo?

Obrigado.

Foi útil?

Solução

Por que você está enumerando -allTouches? Apenas enumerar sobre o touches Definir que é passado. O mesmo vale para os dois métodos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top