0

これは音楽アプリ用です

ユーザーのタスクは、指 1、2、および 3 で画面をタッチして保持することです。

次に、ユーザーが下に置いた順序 (1、2、3) で指を離すと、すべてが期待どおりに機能します。そのため、multipletouchenable、userinteractionenable などのフラグが正しくなければならないようです。

これがレポートです(nはタッチリターンの数、xとyは場所です)(出力ファイルを編集して指1、2、3を識別しました

    2012-06-27 07:22:36.589 Bowing[757:907]  finger 1 Began n=0,x=190, y=860
    2012-06-27 07:22:37.207 Bowing[757:907]  finger 2 Began n=0,x=346, y=704
    2012-06-27 07:22:37.875 Bowing[757:907]  finger 3 Began n=0,x=580, y=708

    2012-06-27 07:22:38.587 Bowing[757:907]  finger 1 Ended n=0,x=191, y=854
    2012-06-27 07:22:39.252 Bowing[757:907]  finger 2 Ended n=0,x=346, y=722
    2012-06-27 07:22:40.019 Bowing[757:907]  finder 3 Ended n=0,x=585, y=712

人生は素晴らしい

ユーザーが逆の順序 (3、2、1) で指を離すと、指 1 が離されるまでメッセージは送信されません。次に、3 本の指すべてのメッセージが送信されます

    2012-06-27 07:22:36.589 Bowing[757:907] finger 1 Began n=0,x=190, y=860
    2012-06-27 07:22:37.207 Bowing[757:907] finger 2 Began n=0,x=346, y=704
    2012-06-27 07:22:37.875 Bowing[757:907] finger 3 Began n=0,x=580, y=708

    2012-06-27 07:22:38.587 Bowing[757:907] finger 1 Ended n=0,x=191, y=854
    2012-06-27 07:22:39.252 Bowing[757:907] finger 2 Ended n=0,x=346, y=722
    2012-06-27 07:22:40.019 Bowing[757:907] finger 3 Ended n=0,x=585, y=712

人生はあまり良くありません。画面上で何が起こったかを反映するには、メッセージは指 3、指 2、指 1 の順に到着する必要があります。

レスポンダーは次のとおりです。スーパーへのメッセージがあるかどうかに関係なく、同じように機能します

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//    [super touchesBegan:touches withEvent:event];
    NSEnumerator *enumerator = [touches objectEnumerator];
    UITouch  *aTouch;
    int counter=0;
    while ((aTouch = [enumerator nextObject])) {
        /* code that acts on the set’s values */
        CGPoint  where=[aTouch locationInView:nil];
        NSLog(@"Began n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y);
        counter++;
    }

}
// Sent to the receiver when a system event (such as a low-memory warning) cancels a touch   event.
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

//    [super touchesCancelled:touches withEvent:event];
    NSEnumerator *enumerator = [touches objectEnumerator];
    UITouch  *aTouch;
    int counter=0;
    while ((aTouch = [enumerator nextObject])) {
        /* code that acts on the set’s values */
        CGPoint  where=[aTouch locationInView:nil];
        NSLog(@"Cancelled n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y);
        counter++;
    }

}

// ビューまたはウィンドウから 1 本または複数の指が離されたときにレシーバーに通知します。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
//    [super touchesEnded:touches withEvent:event];
    NSEnumerator *enumerator = [touches objectEnumerator];
    UITouch  *aTouch;
    int counter=0;
    while ((aTouch = [enumerator nextObject])) {
        /* code that acts on the set’s values */
        CGPoint  where=[aTouch locationInView:nil];
        NSLog(@"Ended n=%i,x=%3.0f, y=%3.0f",counter,where.x,where.y);
        counter++;
    }

}   
4

1 に答える 1

0

問題は次のとおりです。終了したタッチは、すべてのタッチが終了するのを待っています。これが、終了時に 3 つのタッチすべてが送信された理由です。これに対する解決策は[touch count];、1/32 時間間隔で検出し、それが増加または減少したかどうかを検出する nstimer である可能性があります。

于 2012-07-18T15:21:00.203 に答える