延迟触摸响应

时间:2011-09-29 22:27:40

标签: iphone objective-c ios ipad touch

我有一个名为touchStatus的变量,用于跟踪程序中的触摸状态。变量在touchesBegan方法中设置为B,在touchesEnded中设置为E,在touchesMoved中设置为M

但是,我的要求有点不同。我被要求以某种方式编程,以便手指从屏幕上抬起并且touchStatus设置为E之间有一秒钟的延迟。如果用户在一秒钟之前触摸屏幕,则touchStatus应该继续为MB(无论在一秒钟之前是什么)。

我该如何做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以使用

[self performSelector:@selector(setEndedValue:) withObject:self afterDelay:1.0];

创建一个BOOL来监控是否应该设置值,如:

BOOL hasTouchRestarted = NO;

如果在设置值之前再次触摸屏幕,请将值更改为YES并从setEndedValue方法返回。

-(void)setEndedValue {
    if ( hasTouchRestarted ) { return; }
   // set value
    self.touchStatus = E;
}

答案 1 :(得分:0)

在touchEnded例程中设置NSTimer任务以在一秒钟内调用选择器。如果之前有另一次触摸,请取消定时器任务。

答案 2 :(得分:0)

使用NSTimer *计时器ivar发起延迟通话,如果用户在一秒钟之前抬起手指,则取消通话。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    self.myvar = @"B";
    [self.timer invalidate];
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleOneSecondPress) userInfo:nil repeats:NO];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event {
    [self.timer invalidate];
    self.timer = nil;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    self.myvar = @"M";
}
- (void)handleOneSecondPress {
    self.timer = nil;
    self.myvar = @"E";
}