我有一个导航控制器,使用push将其分割为第二个视图控制器。我用:
controller.navigationController!.popToRootViewController(animated: true)
这很有效。此代码导致我的控制器从堆栈弹出,并返回到根视图。但是,我仍然可以在根视图中听到我的代码运行(例如音乐/声音效果)。
我已经探索了一些途径。
一个是创建一个在按下后退按钮时运行的功能。目前,它会删除所有动作/暂停所有音乐:
func pauseAndRemoveEverything() {
for child in fgNode.children { child.removeAllActions() }
for child in bgNode.children { child.removeAllActions() }
soundEffectsPlayer?.volume = 0
musicPlayer?.volume = 0
soundEffectsPlayer?.stop()
musicPlayer?.stop()
}
第二个选项是使用多线程和调度小块代码;然后在用户点击后退按钮时全部取消它们。目前我的代码都在定时块上,我不知道调度会如何影响这个,或者它是否比它的价值更麻烦。
我希望前一个控制器上的操作完全停止在segue上,并减少它在发生这种情况时对内存和能量使用的影响。我该怎么做?