2013-08-24 80 views
2

我在Objective-C使秒錶的權力:秒錶計數在2

- (void)stopwatch 
{ 
    NSInteger hourInt = [hourLabel.text intValue]; 
    NSInteger minuteInt = [minuteLabel.text intValue]; 
    NSInteger secondInt = [secondLabel.text intValue]; 

    if (secondInt == 59) { 
     secondInt = 0; 
     if (minuteInt == 59) { 
      minuteInt = 0; 
      if (hourInt == 23) { 
       hourInt = 0; 
      } else { 
       hourInt += 1; 
      } 
     } else { 
      minuteInt += 1; 
     } 
    } else { 
     secondInt += 1; 
    } 

    NSString *hourString = [NSString stringWithFormat:@"%d", hourInt]; 
    NSString *minuteString = [NSString stringWithFormat:@"%d", minuteInt]; 
    NSString *secondString = [NSString stringWithFormat:@"%d", secondInt]; 

    hourLabel.text = hourString; 
    minuteLabel.text = minuteString; 
    secondLabel.text = secondString; 

    [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(stopwatch) userInfo:nil repeats:YES]; 
} 

秒錶有三個單獨的標籤,如果你想知道,小時,分鐘和秒。然而,取而代之的是1計數,就像2,4,8,16等。

此外,代碼的另一個問題(相當小)是它不會顯示所有數字爲兩位數。例如,它將時間顯示爲0:0:1,而不是00:00:01。

任何幫助真的很感激!我應該補充一點,我對Objective-C非常陌生,所以儘量保持簡單,謝謝!

回答

3

如果您在每次迭代中安排計時器,請勿使用repeats:YES

您在每次迭代中產生一個計時器,並且計時器已經在重複計時,導致計時器指數增長(因此調用方法爲stopwatch)。

更改計時器實例化:

[NSTimer scheduledTimerWithTimeInterval:1.0f 
           target:self 
           selector:@selector(stopwatch) 
           userInfo:nil 
           repeats:NO]; 

或啓動它的stopwatch方法

外界對於第二個問題,只要使用正確的格式字符串。

NSString *hourString = [NSString stringWithFormat:@"%02d", hourInt]; 
NSString *minuteString = [NSString stringWithFormat:@"%02d", minuteInt]; 
NSString *secondString = [NSString stringWithFormat:@"%02d", secondInt]; 

%02d將打印十進制數與0小號填充它的最大長度是2,這是你想要正是。

source

+0

這只是輝煌更換

[self stopwatch] 

。這樣一個簡單而且非常有用的答案;解決了所有的問題!非常感謝! – user2397282

+0

不客氣,我很高興我可以幫助你。 –

0

對於第一個問題,而不是爲每call.Remove創建一個計時器實例從功能秒錶行

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(stopwatch) userInfo:nil repeats:YES]; 

用上面的行替換你的呼叫功能秒錶。即與

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(stopwatch) userInfo:nil repeats:YES];