我有一个名为touchStatus
的变量,用于跟踪程序中的触摸状态。变量在touchesBegan方法中设置为B
,在touchesEnded中设置为E
,在touchesMoved中设置为M
。
但是,我的要求有点不同。我被要求以某种方式编程,以便手指从屏幕上抬起并且touchStatus设置为E
之间有一秒钟的延迟。如果用户在一秒钟之前触摸屏幕,则touchStatus应该继续为M
或B
(无论在一秒钟之前是什么)。
我该如何做到这一点?
答案 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";
}