2012-12-20 143 views
3

可能重复:
How to Pause/Play NSTimer?的NSTimer暂停计时器

我有三个按钮startstoppause ..My startstop按钮做工精细与下面code..but时按Pause它暂停计时器..但是当再次按下start.IT继续从新增加的时间...不是从暂停时间....

supoose我暂停以5秒的启动,等待5秒钟,然后按开始...它应该显示5 ......但因为我没有在starttimer!=nill提到(timer:)显示10 ..

.. 。 怎么会被添加..

我有问题:

  1. Pause不工作。
-(void)start:(NSTimer *)timer 
{ 
    if(_timer==nil) 
    { 
    startDate =[NSDate date]; 

    _timer=[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timer:) userInfo:nil repeats:YES]; 
    } 

    if(_timer!=nil) 
    { 
    float pauseTime = -1*[pauseStart timeIntervalSinceNow]; 

    [_timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 
    } 

} 

-(void)timer:(NSTimer *)timer 
{ 
    NSInteger secondsSinceStart = (NSInteger)[[NSDate date] timeIntervalSinceDate:startDate]; 

    NSInteger seconds = secondsSinceStart % 60; 
    NSInteger minutes = (secondsSinceStart/60) % 60; 
    NSInteger hours = secondsSinceStart/(60 * 60); 
    NSString *result = nil; 
    if (hours > 0) 
    { 
    result = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds]; 
    } 
    else 
    { 
    result = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];   
    } 

    label.text=result; 

    NSLog(@"time interval -> %@",result); 
} 

-(void)stop 
{ 
    if(_timer!=nil) 
    { 
    startDate=nil; 

    [_timer invalidate]; 
    _timer = nil; 
    } 
} 

-(void)pause:(NSTimer *)timer 
{ 
    pauseStart = [NSDate dateWithTimeIntervalSinceNow:0]; 

    previousFireDate = [_timer fireDate]; 

    [_timer setFireDate:[NSDate distantFuture]]; 
} 
+2

访问此http://stackoverflow.com/questions/9975562/how-to-pause-play-nstimer –

回答

1
-(void)pause:(NSTimer *)timer 
{ 
    pauseStart = [NSDate dateWithTimeIntervalSinceNow:0]; 

    previousFireDate = [_timer fireDate]; 

    //[timer setFireDate:[NSDate distantFuture]]; 
    [_timer setFireDate:[NSDate distantFuture]]; 
} 
+0

雅这个作品......这'pause'的timer..but当我再次开始' '它不会从暂停开始......它继续在背后计数......并显示更新的时间不是暂停时间 – Christien

+0

假设我在5秒钟暂停并等待5秒然后按开始..它显示我10秒没有5 ... – Christien

+0

这是现在剩下的唯一问题 – Christien

0

这里是我用于计时器的代码:

我存储所有的部件的时间,在我的(单)类,小时,分钟,秒的值。

而且,我简单地使“暂停”方法中的计时器“无效”,并且存储这些值。

看,如果这有帮助。

-(void) startTimer 
{ 
    NSLog(@"Values for timer: %d H, %d M, %d S", self.hours, self.minutes, self.seconds); 

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

-(void) pauseTimer 
{ 
    if(_timer) 
    { 
     [_timer invalidate]; 
    } 

    _timer = nil; 

    self.hour = hourValue; 
    self.minute = minuteValue; 
    self.second = secondsValue; 
}