3

ユーザーが 3 秒間に 5 回クリックする必要があるUIButtonということですが、そのためのメソッドを実装しようとしていますが、ユーザーが 3 秒間に 5 回続けてボタンをクリックすると、正しい結果が得られます。たとえば、1 回クリックして 2 秒間停止した場合、カウンターは最初のクリックを計算に入れます。

簡単に言えば、最後の 5 回のクリックを検出し、クリックが 3 秒以内に行われたかどうかを知る方法が必要です...

これが私の古いコードです:

-(void)btnClicked{
 counter++;

if (totalTime <=3 && counter==5) {

        NSLog(@"My action");
        // My action
}}

私のコードが単純すぎることを知っているので、なぜプロに尋ねたのか

4

3 に答える 3

2

最後の4回のクリックのタイムスタンプを含む配列を作成し、クリックが発生するたびに、前の4回が現在の時刻から3秒以内にあるかどうかを確認します。そうでない場合は、最も古いタイムスタンプを破棄して現在の時刻に置き換えますが、そうである場合は、イベントを取得し、次の5クリックイン3で使用されないように配列をクリアできます。 -秒イベント。

于 2012-10-14T07:41:18.023 に答える
2

この例を適切に変更してみてください。

// somewhere in the initialization - counter is an int, timedOut is a BOOL
counter = 0;
timedOut = NO;

- (void)buttonClicked:(UIButton *)btn
{
    if ((++counter >= 5) && !timedOut) {
        NSLog(@"User clicked button 5 times within 3 secs");

        // for nitpickers
        timedOut = NO;
        counter = 0;
    }
}

// ...

[NSTimer scheduledTimerWithTimeInterval:3.0
    target:self
    selector:@selector(timedOut)
    userInfo:nil
    repeats:NO
];

- (void)timedOut
{
    timedOut = YES;
}
于 2012-10-14T07:37:54.283 に答える
0

これが H2CO3 のコードの「私のバージョン」です。これは、要件により適しているはずです。

int counter = 0;
BOOL didTimeOut = NO;

- (void)buttonClicked:(UIButton *)button {
    counter ++;
    if (counter == 1) {
        didTimeOut = NO;
        [NSTimer scheduledTimerWithTimeInterval:3.0f
                                         target:self
                                       selector:@selector(timedOut)
                                       userInfo:nil
                                        repeats:NO
         ];
    } else {
        if ((counter >= 5) && !didTimeOut) {
            //Do your action as user clicked 5 times in 3 seconds

            counter = 0;
            didTimeOut = NO;
        }
    }

}

- (void)timedOut {
    didTimeOut = YES;
}
于 2012-10-14T07:52:01.500 に答える