2012-03-26 53 views
0

我一直在搜索互聯網幾天到現在。我確實找到了一些有用的信息,但只是想讓事情變得完美。Iphone應用風格倒數改進?

我正在嘗試寫一個倒數計時器應用程序,它只使用第二個應用程序,我現在的代碼有點太複雜,可能不在主要道路上。尋找一個能夠把它弄直的人。

- (void)updateTimer{ 

NSDate *currentDate = [NSDate date]; 
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"s"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
NSString *timeString=[dateFormatter stringFromDate:timerDate]; 

// where the part change time string back to int 
NSString *changeToInt = timeString; 
int stringInt = [changeToInt integerValue]; 

// loop for count down numbers 
if ((buttValue - stringInt) > 0) { 
    leftTime = buttValue - stringInt; 
    [self updateValue]; 
} else { 
    leftTime = 0; 
    [self updateValue]; 
} 

}

2問題的代碼,1)我必須通過所有的日期格式得到一個整數? 2)在循環中我使用了兩個變量,我希望能拿出一個並使用類似的東西 -

回答

0

我不明白你需要什麼,但我認爲你只是想獲得秒數從現在到一個已知的日期。 timeIntervalSinceNow方法將爲您提供一個NSInteger值,它表示從接收方日期到現在的秒數,如果接收方比現在早,它將是負值(否則將爲正值)。

所以,只是爲了更加明確:

- (void)updateTimer 
{ 
    leftTime = MAX(0, -[startDate timeIntervalSinceNow]); //if less than 0 will be forced to 0 -> date reached 
    [self updateValue]; 
} 

正如我所說的,我不知道這是你想要的。如果不是,我很抱歉。 祝你好運!

+0

我是這樣一個傻瓜,我不明白scheduledTimerWithTimeInterval是如何工作的。如果((buttValue-1)> 0)buttValue = buttValue-1;}如果((buttValue-1)> 0),我現在將代碼更改爲反向倒計數 。 [self updateValue]; } else { buttValue = 0; [self updateValue]; [timer invalidate]; }' – oursonvie 2012-03-26 09:42:13

0
-(void)initialiseTimer 
{ 
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeElapsed) userInfo:nil repeats:YES]; 
    startDate = [[NSDate date] retain]; 

} 
-(void)timeElapsed 
{ 

    NSLog(@"Seconds elapsed since start date %d", abs([startDate timeIntervalSinceNow])); 

} 

你可以操縱它來做倒計時風格的應用程序。

0

使用此代碼!

-(IBAction)startAndStop:(id)sender 
{ 
    startDate = [[NSDate date]retain]; 
    if([btnStopWatch.titleLabel.text isEqualToString:@"Start"]) 
    { 
     stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; 
     [btnStopWatch setTitle:@"Stop" forState:UIControlStateNormal]; 
    } 
    else if([btnStopWatch.titleLabel.text isEqualToString:@"Stop"]) 
    { 
     [stopWatchTimer invalidate]; 
     [btnStopWatch setTitle:@"Start" forState:UIControlStateNormal]; 
    } 
} 
- (void)updateTimer 
{ 
    NSDate *currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm:ss"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    timeString=[dateFormatter stringFromDate:timerDate]; 
    stopWatchLabel.text = timeString; 
    NSLog(@"Seconds elapsed since start date %d", abs([startDate timeIntervalSinceNow])); 

}