I have setup three buttons with start
,stop
,pause
. and given controls to NSTimer to calculates.start stop button works fine gives me the start and stop time but pause
button does not gives me accurate time .it actually pause time ..but start again it adds the paused timed and disp[ay.
supoose i pause at 5 second of start and wait for 5 sec then press start...it should display 5 ...but displaying 10..
-(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)
{
endDate = [NSDate date];
NSLog(@"endate%@",endDate);
NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
NSLog(@"total time %f",interval);
[_timer invalidate];
_timer = nil;
startDate=nil;
}
}
-(void)pause:(NSTimer *)timer
{
pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];
previousFireDate = [_timer fireDate];
[_timer setFireDate:[NSDate distantFuture]];
}