我在我的程序中使用NSTimer播放视频,NSTimer连续运行以在该功能中运行 我怎么暂停&恢复NSTimer的行动,我的行动是 -
-(void)handleTap
{
if(pause==YES)
{
//resume ;
}
else
{
//pause;
}
}
答案 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)。
答案 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提供负值。当用户 返回使用该值来设置适当的计时器。