暂停并恢复NSTimer

时间:2012-08-29 06:24:32

标签: iphone ipad

我在我的程序中使用NSTimer播放视频,NSTimer连续运行以在该功能中运行 我怎么暂停&恢复NSTimer的行动,我的行动是 -

-(void)handleTap
{
    if(pause==YES)
    {
      //resume ;
    }
    else
    {
      //pause;
    }
}

8 个答案:

答案 0 :(得分:4)

NSTimer中没有暂停和恢复功能。你可以像下面提到的那样做。

- (void)startTimer {
    m_pTimerObject = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES];
}
- (void)fireTimer:(NSTimer *)inTimer {
    // Timer is fired.
}
- (void)resumeTimer {
     if(m_pTimerObject) {
         [m_pTimerObject invalidate];
         m_pTimerObject = nil;        
 }
 m_pTimerObject = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES];
}
- (void)pauseTimer {
    [m_pTimerObject invalidate];
    m_pTimerObject = nil;
}

我希望这段代码片段对您有所帮助。

答案 1 :(得分:2)

你不能暂停计时器。

你可以:

  • 使计时器无效并在您想要恢复时创建另一个计时器(在大多数情况下更可取)
  • 或在程序中设置一个标志/变量,注意应忽略计时器操作。

答案 2 :(得分:0)

nstimer中没有特定的方法可以暂停和恢复。如​​果你想停止计时器,你需要使计时器无效

答案 3 :(得分:0)

在执行操作时,您只需使用[timer invalidate];,当您想要恢复时,只需再次启动计时器

答案 4 :(得分:0)

您无法暂停计时器。您可以保存计时器的fireDate以及当前日期。在此之后,您将使计时器无效。当需要恢复计时器时,您需要创建一个新的计时器对象,并将开火日期设置为旧的开火日期加上用户在菜单中的时间(oldTime + currentTime)。

参考how-to-pause-and-resume-nstimer-in-iphone链接

答案 5 :(得分:0)

- (IBAction)pauseResumeTimer:(id)sender {

    if (timerRunning == NO) {
        timerRunning = YES;

    [pauseTimerBtn setTitle:@"Resume" forState:UIControlStateNormal];
    NSString *stringVal = [NSString stringWithFormat:@"%@",timeTxt.text];
    stringVal = [stringVal stringByReplacingOccurrencesOfString:@":" withString:@"."];

    float tempFloatVal = [stringVal floatValue];
    int minuteValue = floorf(tempFloatVal);
    float tempSecVal = [stringVal floatValue] - floorf(tempFloatVal);
    int secondVal = tempSecVal*100;
    minuteValue = minuteValue*60;

    oldTimeValue = minuteValue + secondVal;
    [timer invalidate];
    timer = nil;
}
else
{
    timerRunning = NO;
    [pauseTimerBtn setTitle:@"Pause" forState:UIControlStateNormal];
    startDate = [NSDate date];
    timer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timer:) userInfo:nil repeats:YES];
    }    
}

- (void)runTimer:(NSTimer *)timer {
    NSInteger secondsAtStart = (NSInteger)[[NSDate date] timeIntervalSinceDate:startDate];
    secondsAtStart = secondsAtStart + oldTimeValue;
    NSInteger seconds = secondsAtStart % 60;
    NSInteger minutes = (secondsAtStart / 60) % 60;
    NSInteger hours = secondsAtStart / (60 * 60);
    NSString *result = nil;
    result = [NSString stringWithFormat:@"%02ld:%02ld",(long)minutes,(long)seconds];
    timeTxt.text   =  result;

}

答案 6 :(得分:0)

我写了一个控制器类,可以处理暂停和不占用的计时器。您可以在此处找到它:https://github.com/LianaChu/LCPausableTimer

它与BornCoder的答案非常相似。如果您发现自己需要在项目中经常暂停和取消暂停计时器,则此控制器类非常有用。

如果您使用它,我将非常感谢您的任何评论或反馈,例如您如何使用它,您希望看到哪些更改,或者您希望我添加的任何功能。请不要犹豫,在这里回复你的评论,或发布在github页面上的问题标签上。

答案 7 :(得分:-1)

请参阅以下链接

How can I programmatically pause an NSTimer?

我在苹果上找到了这个答案

  

您可以存储自计时器以来经过的时间量   启动...当计时器开始时,将日期存储在NSDate变量中。   然后当用户切换时...使用方法timeIntervalSinceNow in   NSDate类存储已经过了多少时间...请注意这一点   将为timeIntervalSinceNow提供负值。当用户   返回使用该值来设置适当的计时器。