我有一个UIButton
,用户必须在三秒内点击它5次,我试图为此实现一个方法,但如果用户在3中点击按钮5次,我会得到正确的结果连续秒,如果用户单击一次并停止2秒,例如,计数器将在计算中进行第一次点击。
简而言之,我需要一种方法来检测最后五次点击并知道点击次数是否在三秒内......
这是我的旧代码:
-(void)btnClicked{
counter++;
if (totalTime <=3 && counter==5) {
NSLog(@"My action");
// My action
}}
我知道我的代码太简单了,所以我问你专业人员的原因
答案 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;
}