如何在暂停游戏后从停止的地方重新启动游戏计时器?

时间:2018-07-02 19:09:32

标签: ios objective-c timer

我正在用Xcode 9.3和Objective-C做文字游戏。

我已经在装有iOS 11.3.1的手机上安装了游戏,并且如果在游戏中接到电话,它会被通话取代。然后,通话结束后,游戏会重新出现并从中断处继续播放。所有这些都无需添加任何代码。

当用户中断游戏时,我正在尝试这样做。按主页按钮。

我有;

- (void)applicationWillResignActive:(UIApplication *)application {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"stopTimer" object:self];
}

并且:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"startTimer" object:self];
}

而且

@interface ViewController ()
@property (strong, nonatomic) WRWGameController* controller;
@end

我在游戏控制器中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopTimer)        
                                            name:@"stopTimer"
                                          object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startTimer)
                                             name:@"startTimer"
                                           object:nil];

计时器停止在非活动状态,但是当游戏重新开始时,计时器再次从00.00开始。

我在这里查看了各种停止和开始计时器的信息,但是还没有找到将代码合并到我的应用程序中的方法,因此计时器在中断的地方再次启动。

1 个答案:

答案 0 :(得分:0)

您需要将开始时间保存到NSDate实例变量:

@property (strong, nonatomic) NSDate *startTime;

然后将日期保存在startTimer方法中:

self.startTime = [NSDate date];

然后,当您停止计时器时,您可以使用来获取经过的时间

NSTimeInterval elapsedTime = -[self.startTime timeIntervalSinceNow];

重新启动时间后,只需从计时器中使用的间隔中减去elapsedTime。