【问题标题】:Is it possible to prepare/reset a scene before it is shown / before viewDidAppear / viewDidLoad?是否可以在显示之前/在 viewDidAppear / viewDidLoad 之前准备/重置场景?
【发布时间】:2017-11-29 14:00:46
【问题描述】:

我有一个带有几个动画按钮的 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 运行时在后台重置所有内容?

【问题讨论】:

    标签: ios swift uiviewcontroller viewdidload dismiss


    【解决方案1】:

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

    【讨论】:

    • viewWillAppear 就像魅力一样,谢谢。以前从未想过那个。
    【解决方案2】:

    对此有多种解决方案,具体取决于您想要获得的花哨程度。

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

    这是在关闭完成后对您的代码的回调。这将允许您反转动画。

    回调没有参数。

    所以,如果你的 setupScene() 方法按照它说的做,

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

    应该这样做。

    【讨论】:

    • 这个方法听起来不错,但是我如何从另一个 viewController 访问 setupScene() 函数呢?关闭函数在 timerViewControler.swift 上,而不是在原始 viewController.swift 上。
    • Apple 建议不要这样做。 :) 提出的 VC 应该解雇。你可以试试@Brian 的建议,将代码放在viewWillAppear:(或viewDidDisappear:,就此而言),看看是否适合你。然后您可以在其他时间引入延迟解雇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多