Iphone app风格倒数提升?

时间:2012-03-26 09:00:44

标签: iphone ios cocoa sdk countdowntimer

到目前为止,我一直在网上搜索几天。我确实找到了一些有用的信息,但只是想让事情变得完美。

我正在尝试编写一个仅使用秒的倒计时应用程序,我目前的代码有点过于复杂,可能不在主要道路上。寻找可以直接上去的人。

- (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)在循环中我使用了两个变量,我希望拿出一个并使用类似的东西 -

3 个答案:

答案 0 :(得分:0)

我不明白你需要什么,但我认为你只想得到从现在到已知日期的秒数。 timeIntervalSinceNow方法将为您提供一个NSInteger值,表示从接收器日期到现在的秒数,如果接收器早于现在,则为负值(否则为正)。

所以,更明确一点:

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

正如我所说,我不确定这是你想要的。如果不是,我很抱歉。 祝你好运!

答案 1 :(得分: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]));

}

你可以操纵它来制作一个倒计时风格的应用程序。

答案 2 :(得分: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]));

}