2013-09-24 40 views
0

我在另一個函數中有一個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

恐怕我不明白 –

+0

我對代碼感到困惑:你創建一個重複的定時器,讓它只發一次,然後立即取消它。這是否準確?如果是這樣,爲什麼明確地創建一個計時器呢?即使你想要,爲什麼創建一個重複計時器,如果你不想重複? – Tommy

回答

1

希望這個作品:

-split addLifePoints成2種方法。後

-put代碼在另一種方法(newMethod)

-call newMethod所述的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]; 
    } 

    - (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]; 
    } 
相關問題