是否可以在viewDidAppear / viewDidLoad之前/之前准备/重置场景?

时间:2017-11-29 14:00:47

标签: ios swift uiviewcontroller viewdidload dismiss

我有一个带有几个动画按钮的viewController,当用户按下按钮时背景模糊(动画)和一个菜单来选择一些东西(都转到一个新的viewController)。

所以基本上有一个场景,用户打开菜单,场景模糊,除了菜单和用户按下按钮,另一个viewController以编程方式显示crossDissolve。这就是我展示新控制器的方式:

let storyboard = UIStoryboard.init(name: "Timer", bundle: nil)
let vc = storyboard.instantiateInitialViewController()!
vc.modalTransitionStyle = .crossDissolve
present(vc, animated: true, completion: nil)

到目前为止一直很好,但我无法重置原始场景(基本上只是去除模糊并重置动画按钮)。我有一个名为setupScene()的函数,它为应用程序启动准备一切(隐藏了一些按钮,模糊的alpha为0等等。)

我只是解雇了这个新的viewController:

dismiss(animated: true, completion: nil)

与原始场景相比,它的最后状态(模糊等)再次显示。

所以当新的viewController被呈现时,我想在后台重置原始viewController中的所有内容,这样当新的viewController被解除时,旧的场景已经被重置,但是这不起作用。我试图在viewDidAppear中移动setupScene()函数,但是在viewDidAppear或viewDidLoad中,首先关闭新的viewController,显示原始viewController再次处于模糊状态,然后setupScene()运行以重置所有内容(这显然有效)细)。

在显示新的viewController或者crossDissolve正在运行时,有没有办法在后台重置所有内容?

2 个答案:

答案 0 :(得分:1)

有几种解决方案,取决于您想要获得的花哨程度。

根据您的描述,我认为首先要尝试的是利用completion中的dismiss(animated:completion:)参数

一旦完成解雇,这是对您的代码的回调。这将允许您反转动画。

回调不带任何参数。

因此,如果您的setupScene()方法符合其说法,

dismiss(animated: true, completion: {
    setupScene()
})

应该这样做。

答案 1 :(得分:1)

这听起来像viewWillAppear的好例子。这是一个生命周期方法,在视图控制器视图的可见性发生变化时调用。 viewDidLoad只被调用一次。