Вопрос мультитач - PullRequest
1 голос
/ 31 июля 2009

Я хочу определить, к какой части экрана касаются, когда пользователь встряхивает iPhone.

Я делаю это следующим образом:

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

Все работает нормально, если пользователь убирает обе руки перед тем, как снова встряхнуть, но все портится, если я держу обе руки на экране и удаляю одну из них.

т.е. Я трясу обеими руками на экране, а потом хочу потрясти iPhone только одной рукой. В этом случае дрожание не будет учитываться - как будто на экране нет прикосновений. Я предполагаю, что когда я убираю одну руку с экрана, удаляются оба «прикосновения».

В чем проблема и как ее исправить?

Спасибо.

1 Ответ

2 голосов
/ 31 июля 2009

Почему вы перечисляете более -allTouches? Просто перечислите переданный набор touches. То же самое относится к обоим методам.

...