3

我有一个UIButton用户必须在三秒钟内点击它 5 次,我试图为此实现一个方法,但是如果用户在连续 3 秒内点击按钮 5 次,我会得到正确的结果,如果用户例如,单击一次并停止 2 秒,计数器在计算中采用第一次单击。

简而言之,我需要一种检测最后五次点击并知道点击是否在三秒内的方法......

这是我的旧代码:

-(void)btnClicked{
 counter++;

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

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

我知道我的代码太简单了,所以我问你专业的

4

3 回答 3

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 回答
2

只需有一个带有最后四次点击的时间戳的数组,每次点击时,检查前四次是否在当前时间的 3 秒内。如果不是这种情况,则丢弃最旧的时间戳并替换为当前时间,但如果是这种情况,您将获得您的事件,您可以清除数组,以便在接下来的 5-clicks-in-3 中不使用它们-秒事件。

于 2012-10-14T07:41:18.023 回答
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 回答