我想在 -touchesEnded 方法完成执行后2秒执行 -recognized 方法。但是,如果用户在这2秒内触摸了某些内容,则不得执行该方法。在下次再次执行 -touchesEnded 方法后,必须再次设置计时器等待2秒钟。等等......希望这个问题足够清楚。如果没有,请告诉我。
答案 0 :(得分:2)
您需要使用NSTimer来协调此问题。当您想要启动计时器的事件被触发时,使用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
在两秒钟内安排一个函数调用。
使用对视图控制器来说是全局的布尔变量,以防止在两者之间设置计时器。
这是一个粗略的想法:
BOOL shouldRespondToTouch = YES;
- (void)touchesEnded {
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(doAction) userInfo:nil repeats:NO];
shouldRespondToTouch = NO;
}
- (void)doAction {
shouldRespondToTouch = YES;
// Do stuff here
}
答案 1 :(得分:0)
-(void) touchesEnded {
[NSTimer scheduledTimerWithInterval: 1.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES];
}
//define the targetmethod
-(void) targetMethod: NSTimer * theTimer
{
NSLog(@\"Me is here at 1 minute delay\");
}
答案 2 :(得分:0)
事实证明,这很简单。
在view.h中创建一个ivar
NSDate *startDate;
在view.m
中将以下方法添加到这些方法中- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
self->startDate = [NSDate date];
NSLog(@"%@", startDate);
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (self->startDate) {
NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self->startDate];
NSLog(@"Time: %f", ti);
if (ti >= 2 ) {
NSLog(@"Yes, greater than 2 seconds !");
}
}
}
像魅力一样。