如何让函数暂停直到NSTimer选择器完成?

时间:2013-09-24 01:48:08

标签: ios nstimer

我在另一个函数中有一个NSTimer,但我希望能够等待NSTimer变为无效,然后再继续使用代码有没有办法做到这一点?

    - (IBAction)addLifePoints:(UIButton *)sender
{
    [[ARCHDuelCalculator sharedARCHDuelCalculator] setLifePointDelta:[NSNumber numberWithInt: [self.hiddenTextField.text intValue]]];
    [[ARCHDuelCalculator sharedARCHDuelCalculator] setAddOrSubstract: YES];
    [[ARCHDuelCalculator sharedARCHDuelCalculator] applyingDeltaToLifePointsByDelta];

    // This will animate the life points
    animationTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(animateLifePoints) userInfo:nil repeats:YES];


    // This is where we bring it back to the view controller
    self.duelistOneLifePoints.text = [[ARCHDuelCalculator sharedARCHDuelCalculator].duelistOneLifePoints stringValue];
    self.duelistTwoLifePoints.text = [[ARCHDuelCalculator sharedARCHDuelCalculator].duelistTwoLifePoints stringValue];

    self.hiddenTextField.text = @"";
    [self syncTextField: self.hiddenTextField];
    [self.hiddenTextField resignFirstResponder];
}

    - (void) animateLifePoints
{
    NSNumber *sections = [[ARCHDuelCalculator sharedARCHDuelCalculator] getLifePointSections];

    for(int timer = 0; timer < 100; ++timer)
    {
        self.duelistOneLifePoints.text = [[[ARCHUtilities sharedARCHUtilities] subtractTwoNSNumbersByDataType:@"int" firstNumber:[NSNumber numberWithInt: [self.duelistOneLifePoints.text intValue]] secondNumber:sections] stringValue];

        if ((timer % 14) == 0)
        {
            [self playLifePointSound:@"mainLifePointSound" typeOfFile:@"mp3"];
        }

    }

    [animationTimer invalidate];
}

1 个答案:

答案 0 :(得分:1)

希望这有效:

-split addLifePoints分为2种方法。

在另一个方法(newMethod)中使用nstimer之后的

-put代码

- 在nstimer失效后立即调用newMethod。

    - (IBAction)addLifePoints:(UIButton *)sender
    {
     [[ARCHDuelCalculator sharedARCHDuelCalculator] setLifePointDelta:[NSNumber numberWithInt:          [self.hiddenTextField.text intValue]]];
     [[ARCHDuelCalculator sharedARCHDuelCalculator] setAddOrSubstract: YES];
     [[ARCHDuelCalculator sharedARCHDuelCalculator] applyingDeltaToLifePointsByDelta];

     // This will animate the life points
      animationTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(animateLifePoints) userInfo:nil repeats:YES];
    }

    - (void) animateLifePoints
    {
     NSNumber *sections = [[ARCHDuelCalculator sharedARCHDuelCalculator] getLifePointSections];

     for(int timer = 0; timer < 100; ++timer)
      {
       self.duelistOneLifePoints.text = [[[ARCHUtilities sharedARCHUtilities] subtractTwoNSNumbersByDataType:@"int" firstNumber:[NSNumber numberWithInt: [self.duelistOneLifePoints.text intValue]] secondNumber:sections] stringValue];

      if ((timer % 14) == 0)
       {
          [self playLifePointSound:@"mainLifePointSound" typeOfFile:@"mp3"];
       }
     }

     [animationTimer invalidate];
     [self newMethod];  //////////////////// ADD THIS LINE ALSO, continue code
   }

    -(void)newMethod{
       //...so continue code...
       // This is where we bring it back to the view controller
        self.duelistOneLifePoints.text = [[ARCHDuelCalculator sharedARCHDuelCalculator].duelistOneLifePoints stringValue];
        self.duelistTwoLifePoints.text = [[ARCHDuelCalculator sharedARCHDuelCalculator].duelistTwoLifePoints stringValue];

        self.hiddenTextField.text = @"";
        [self syncTextField: self.hiddenTextField];
        [self.hiddenTextField resignFirstResponder];
    }