我有一个带有几个动画按钮的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正在运行时,有没有办法在后台重置所有内容?
答案 0 :(得分:1)
有几种解决方案,取决于您想要获得的花哨程度。
根据您的描述,我认为首先要尝试的是利用completion
中的dismiss(animated:completion:)
参数
一旦完成解雇,这是对您的代码的回调。这将允许您反转动画。
回调不带任何参数。
因此,如果您的setupScene()
方法符合其说法,
dismiss(animated: true, completion: {
setupScene()
})
应该这样做。
答案 1 :(得分:1)
这听起来像viewWillAppear的好例子。这是一个生命周期方法,在视图控制器视图的可见性发生变化时调用。 viewDidLoad只被调用一次。