首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能在场景显示/ viewDidAppear / viewDidLoad之前准备/重新设置一个场景?

是否有可能在场景显示/ viewDidAppear / viewDidLoad之前准备/重新设置一个场景?
EN

Stack Overflow用户
提问于 2017-11-29 14:00:46
回答 2查看 130关注 0票数 1

我有一个带有几个动画按钮的viewController,当用户按下一个按钮时,背景会变得模糊(动画),并显示一个菜单来选择一些东西(所有这些都会转到一个新的viewController上)。

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

代码语言:javascript
运行
复制
let storyboard = UIStoryboard.init(name: "Timer", bundle: nil)
let vc = storyboard.instantiateInitialViewController()!
vc.modalTransitionStyle = .crossDissolve
present(vc, animated: true, completion: nil)

到目前为止还不错,但我不能重置原来的场景(基本上只是删除模糊和重置动画按钮)。我在其中有一个名为setupScene()的函数,它为应用程序的启动做好一切准备(有些按钮是隐藏的,模糊的字母是0,等等)。

我只是像这样拒绝新的viewController:

代码语言:javascript
运行
复制
dismiss(animated: true, completion: nil)

和原来的场景相比,它的最后一种状态(模糊等等)再次显示。

因此,当新的viewController出现时,我想重置背景中原始viewController中的所有内容,以便当新的viewController被取消时,旧场景已经被重置,但这是行不通的。我尝试在viewDidAppear中移动viewDidAppear ()函数,但是在viewDidAppear或viewDidLoad中,新的viewController首先被取消,显示原来的viewController处于最后一个状态,然后setupScene()运行来重置一切(这显然很好)。

是否有方法在显示新viewController或运行crossDissolve时重置背景中的所有内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-29 14:15:01

对于viewWillAppear来说,这似乎是一个很好的案例。这是一个生命周期方法,当视图控制器的视图的可见性发生变化时调用该方法。viewDidLoad只被调用一次。

票数 1
EN

Stack Overflow用户

发布于 2017-11-29 14:07:04

对此有几种解决方案,取决于您想要得到多大的花哨。

基于您所描述的,我认为首先要尝试的是利用dismiss(animated:completion:)中的那个dismiss(animated:completion:)参数。

这是一个回调您的代码,一旦解散完成。这将允许您扭转您的动画。

回调不接受任何参数。

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

代码语言:javascript
运行
复制
dismiss(animated: true, completion: {
    setupScene()
})

应该这么做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47554575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档