1

ユーザーが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 を振ってしまいます。この場合、画面に触れていないかのように、シェイクはカウントされません。画面から片手を離すと、両方の「タッチ」が削除されると思います。

何が問題で、どうすれば修正できますか?

ありがとう。

4

1 に答える 1

2

なぜあなたは列挙しているの-allTouchesですか?渡されたセットを列挙するだけtouchesです。同じことが両方のメソッドに当てはまります。

于 2009-07-30T22:14:37.447 に答える