我希望我的应用能够在用户点击主页时运行暂停功能。当我退出应用程序时,它暂停,但是当我再次进入应用程序时运行视图确实加载功能。有没有人知道如何让视图执行加载功能只在第一次加载视图之前运行才会被加载?
这是我的暂停功能:
func pauseGame322() {
ThreeTime = 3
CountdownUntillGameLabel.text = String(ThreeTime)
if PlayButton.isHidden == true &&
ContinueButton.isHidden == true{
timer.invalidate()
timer10.invalidate()
TotalSecondsForPause.isHidden = false
PauseView.isHidden = false
UnpauseButton.isHidden = false
TotalSecondsForPause.text = String(time)
}
}
答案 0 :(得分:1)
从App Delegate中的applicationWillResignActive(_:)
调用暂停功能(强调我的):
您应该使用此方法暂停正在进行的任务,禁用计时器,并降低OpenGL ES帧速率。 游戏应该使用此方法暂停游戏。处于非活动状态的应用应该在等待转换为活动状态或后台状态时执行最少的工作。
如果您需要访问当前视图控制器,请按this question。但是在这里更新UI毫无意义。您的应用即将进入后台,用户将看不到任何UI更改。当用户返回时,您可以在applicationWillBecomeActive(_:)
。
答案 1 :(得分:0)
您无法限制 viewDidLoad 的来电。每次初始化ViewController时,都会调用viewDidLoad。要处理这种情况,您可以做的是,将代码放在一个单独的方法中,并在第一次执行检查后从viewDidLoad调用该方法。要知道这是第一次,您只需在 UserDefaults 中添加一个标志变量即可。
此外,当您说'用户存在'时,它可能有不同的含义。您是说用户杀了应用程序,还是意味着用户将应用程序置于后台?对于第一种情况,您应该首先在 applicationDidFinishLaunching 方法中进行检查,而对于第二种情况(即背景),从 applicationWillEnterBackground 调用暂停功能,然后播放来自 applicationDidEnterForeground 。
尝试以更有效的方式使用应用程序的生命周期方法。