如何将 NSTimer 与应用程序的导航流程一起使用?
How do i use NSTimer with navigation flow of application?
我想用多个 UIViewController 维护计时器。
比如,我在 ViewController1 中创建一个计时器,间隔为 60 秒。
20 秒后,应用程序导航到 ViewController2。(因此还剩下 40 秒来执行计时器)。
停留20秒后回到ViewController1,此时定时器应该在返回40秒后执行,然后在60秒后执行。
那我该怎么做呢?
提前致谢。
虽然这可能是一个具有更好实践的解决方案,但您可以在 AppDelegate 中设置 NSTimer
并使 AppDelegate
管理 segues 以推送或弹出您的 UIViewControllers
如果您想在多个实例中使用一个项目,请尝试使用单例设计模式。但就像看起来一样,您永远不会从 VC1 导航回来,所以所有对象仍然存在。
在How to Pause/Play NSTimer?的基础上,您可以更改一些部分以使其适合您的情况。
- (void)stopTimer
{
if( timer )
{
[timer invalidate];
[timer release]; // if not ARC
timer = nil;
}
}
- (void)startTimer
{
[self stopTimer];
int interval = 1.;
timer = [[NSTimer scheduledTimerWithTimeInterval:interval
target:self
selector:@selector(countUp)
userInfo:nil repeats:YES] retain]; // retain if not ARC
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self timerStart];
}
-(void)viewWillDisappear:(BOOL)animated
{
[self stopTimer];
[super viewWillDisappear:animated];
}
-(void)countUp
{
if(timePassed++ >= 60) // defined in header
{
timePassed=0;
[self myCustomEvent];
}
}
我想用多个 UIViewController 维护计时器。 比如,我在 ViewController1 中创建一个计时器,间隔为 60 秒。 20 秒后,应用程序导航到 ViewController2。(因此还剩下 40 秒来执行计时器)。 停留20秒后回到ViewController1,此时定时器应该在返回40秒后执行,然后在60秒后执行。
那我该怎么做呢?
提前致谢。
虽然这可能是一个具有更好实践的解决方案,但您可以在 AppDelegate 中设置 NSTimer
并使 AppDelegate
管理 segues 以推送或弹出您的 UIViewControllers
如果您想在多个实例中使用一个项目,请尝试使用单例设计模式。但就像看起来一样,您永远不会从 VC1 导航回来,所以所有对象仍然存在。
在How to Pause/Play NSTimer?的基础上,您可以更改一些部分以使其适合您的情况。
- (void)stopTimer
{
if( timer )
{
[timer invalidate];
[timer release]; // if not ARC
timer = nil;
}
}
- (void)startTimer
{
[self stopTimer];
int interval = 1.;
timer = [[NSTimer scheduledTimerWithTimeInterval:interval
target:self
selector:@selector(countUp)
userInfo:nil repeats:YES] retain]; // retain if not ARC
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self timerStart];
}
-(void)viewWillDisappear:(BOOL)animated
{
[self stopTimer];
[super viewWillDisappear:animated];
}
-(void)countUp
{
if(timePassed++ >= 60) // defined in header
{
timePassed=0;
[self myCustomEvent];
}
}