2011-01-29 3 views
0

Как отключить таймер в одном методе при вызове другого метода? В основном, когда tapFig называется, я хочу, чтобы отправить сообщение moveStickFig недействительной функции таймераЦель C: удаленно аннулировать таймер

-(void) moveStickFig:(NSTimer *)timer { 
    UIButton *stick = (UIButton *)timer.userInfo; 
    CGPoint oldPosition = stick.center; 
    stick.center = CGPointMake(oldPosition.x + 1 , oldPosition.y); 
    if (oldPosition.x == 900) { 
     [stick removeFromSuperview]; 
     healthCount--; 
     NSLog(@"%d", healthCount); 
     [healthBar setImage:[UIImage imageNamed:[NSString stringWithFormat:@"health%d.png",healthCount]]]; 
    } 
} 

-(void) tapFig:(id)sender { 
    UIButton *stick = (UIButton *)sender; 
    count++; 
    score.text = [NSString stringWithFormat:@"%d", count]; 
    [stick removeFromSuperview]; 
    [stick release]; 
} 

ответ

1

Я думаю, что вам нужен флаг в moveStickFig, который устанавливает к истине, когда tapFig называется.

-(void) moveStickFig:(NSTimer *)timer 
{ 
    if(isTimerInvalidateSet) 
    { 
     [ self timer:invalidate ]; 
     return; 
    } 
    // ...... 
} 

// you need to pass the same timer instance to `tapFig` that you earlier passed to `moveStickFig`. 

-(void) tapFig:(id)sender 
{ 
    isTimerInvalidateSet = true; 
    [ self moveStickFig:theTimerInstance ] ; // theTimerInstance is same as earlier you passed to `moveStickFig` 

    isTimerInvalidateSet = false; 
    // ...... 
} 

Примечание: Как правило, вы устанавливаете таймер для повторного вызова функции с фиксированными кадрами в секунду. Таймер выполняет задание с таким расчетом. Нет необходимости повторно передавать экземпляр таймера. Если это то, что вы хотите, тогда ОК. However, if you need your game logic to be continued, you need to reset the isTimerInvalidateSet to false. Надеюсь, это поможет!

Смежные вопросы