2

重複の可能性:
NSTimerを一時停止/再生する方法は?

私は3つのボタンを持っておりstart stop、..pause私のボタンは以下のコードで正常に機能しています..しかし、それを押すとタイマーが一時停止します..しかし、もう一度私がスタートを押すと、ITは新しく追加された時間から続きます...一時停止時間からではありません...。startstopPause

開始の5秒で一時停止し、5秒間待ってから、開始を押します... 5が表示されますが、10が表示されます。

については触れていませんので ...どのように追加さ(timer:)れますか。timer!=nillstart

私は問題がある:

  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]];
}
4

2 に答える 2

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

  previousFireDate = [_timer fireDate];

  //[timer setFireDate:[NSDate distantFuture]];
  [_timer setFireDate:[NSDate distantFuture]];
}
于 2012-12-20T08:46:50.437 に答える
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;
}
于 2012-12-20T11:57:21.330 に答える