如何限制触摸持续时间?

时间:2013-04-22 15:41:22

标签: ios objective-c cocos2d-iphone uigesturerecognizer

是否有任何方法可以限制用户手势的持续时间?例如,用户可以拖动精灵,但是从cctouch开始,它只能持续3秒。持续时间后,应用程序将自动触发cctouch结束方法。

2 个答案:

答案 0 :(得分:2)

是的,这是实现这一目标的简单策略。当用户开始意识到手势时,您可以启动计时器,当计时器点击时,停止计时器。

-(void) timerDidTick:(NSTimer *)theTimer{
    cpMouseRelease(mouse);
}

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
    NSTimer *aTimer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(timerDidTick:) userInfo:nil repeats:NO] ;
    [[NSRunLoop mainRunLoop] addTimer:aTimer forMode:NSRunLoopCommonModes];
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    cpMouseGrab(mouse, touchLocation, false);
...
}

答案 1 :(得分:2)

我建议使用块安排计时器。避免将NSTimer与Cocos2D一起使用,因为它不允许内置暂停/恢复功能。

安排如下:

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{
    [[self scheduler] scheduleBlockForKey:@"menu" target:self interval:3.0f repeat:0 delay:0 paused:NO block:^(ccTime dt)
             {
                 // perform end of touch actions here
             }];
}

如果用户在调用计时器之前做任何你想做的事情(可能是ccTouchEnded / ccTouchCancelled),也要确保取消计划阻止:

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event 
{
    [[self scheduler] unscheduleBlockForKey:@"menu" target:self];
}