NSTimer 未正确暂停和恢复



我有一个NSTimer,我分别使用以下方法暂停和恢复:

-(void) pauseTimer:(NSTimer *)timer {
    self.scene.paused = YES;
    pauseStart = [NSDate date];
    previousFireDate = [timer fireDate];
    [timer setFireDate:[NSDate distantFuture]];
}
-(void) resumeTimer:(NSTimer *)timer {
    self.scene.paused =  NO;
    NSDate *currentDate = [NSDate date];
    NSTimeInterval pauseTime = [currentDate timeIntervalSinceDate:pauseStart];
    NSDate *neededFireDate = [NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate];
    [timer setFireDate:neededFireDate];
    NSLog(@"Fire Date: %@", timer.fireDate); //returning null
}

它没有正确重置火灾日期,因为当我检查 timer.fireDate 时,它说null .我们想要的只是让这些方法暂停计时器,并在调用 resume 方法时从中断的位置恢复计时器。任何帮助将不胜感激。

我的解决方案与你的解决方案在一个主要方面有所不同。我在它恢复时重新创建一个计时器。这是我的做法,它一直运行良好:

@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, assign) NSTimeInterval elapsedTime;
@property (nonatomic, strong) NSDate *startDate;
- (void)startTimer
{
    NSTimeInterval timeInterval = 20.0f;
    // Create a timer. Adjust the elapsed time.
    _timer = [NSTimer scheduledTimerWithTimeInterval:(timeInterval - _elapsedTime)
                                              target:self
                                            selector:@selector(timerFireMethod:)
                                            userInfo:nil
                                             repeats:YES];
    // Save the start date.
    _startDate = [NSDate date];
}

- (void)timerFireMethod:(NSTimer *)theTimer
{
    // Clean.
    [_timer invalidate];
    _timer = nil;
    _elapsedTime = 0.0;
    [self startTimer];
    // Additional handling.
}

- (void)pauseTimer
{
    // Clean.
    [_timer invalidate];
    _timer = nil;
    // Save the elapsed time.
    _elapsedTime = [[NSDate date] timeIntervalSinceDate:_startDate];
}

希望对您有所帮助。

最新更新