我需要一种方法来检测我的UIButton上的最后五次点击时间

时间:2012-10-14 07:27:56

标签: iphone objective-c ios uibutton nstimer

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

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

这是我的旧代码:

-(void)btnClicked{
 counter++;

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

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

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

只需拥有一个包含最后四次点击时间戳的数组,每次点击时,检查前四次是否在距离当前时间3秒内。如果不是这种情况,请丢弃最旧的时间戳并替换为当前时间,但如果是这种情况,则会得到您的事件,您可以清除阵列,以便在接下来的5次点击中使用它们-seconds event。

答案 2 :(得分: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;
}