【问题标题】:Presenting a specific view controller once immediately after launch screen closes启动屏幕关闭后立即呈现特定视图控制器一次
【发布时间】:2018-02-28 05:49:04
【问题描述】:

我有一个单屏教程视图控制器。我希望本教程 VC 只显示一次(用户默认设置),但我希望从启动屏幕完成时平滑过渡 -> 教程 VC。

现在 - 启动屏幕完成,然后应用程序的主界面显示一瞬间,然后出现教程 VC。我想去掉这个主界面的“闪”。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if !didShowTut {
        fireTutorial()
        didShowTut = true
    }
}

func fireTutorial() {
    let tutVC = UIStoryboard(name: "FirstTutorial", bundle: nil).instantiateViewController(withIdentifier: "TutorialSBID") as UIViewController
    tutVC.modalPresentationStyle = .overCurrentContext
    self.present(tutVC, animated: false, completion: nil)
}

任何帮助从启动屏幕创建平滑过渡 -> 教程 VC 将不胜感激。

【问题讨论】:

  • 将此代码写入 viewWillAppear 而不是 viewDidAppear
  • @Joe 第一次,将教程 VC 设置为窗口的根视图控制器。教程完成后,使用您的应用程序的主界面再次更改窗口的根视图控制器。
  • @ShebinKoshy - 目前正在研究您的建议作为解决方案。
  • @乔酷。感谢您的告知。

标签: swift viewdidappear


【解决方案1】:

您在 viewDidAppear 函数上显示 tutVC,该函数在屏幕加载后执行。

尝试在屏幕加载前调用 override func viewDidLoad()override func viewWillAppear(_ animated: Bool) 方法上的 fireTutorial()。

【讨论】:

  • 我确实试过了;如果我将 fireTutorial() 放在 viewDidLoad 或 viewWillAppear 中,则 VC 永远不会加载。
  • @Joe 哪个是应用根视图控制器?
  • 主VC是根。我想对于第一个应用程序加载,教程 VC 应该是 root,正如 Shebin 上面所建议的那样?
  • @Joe 这可能是因为您没有使用导航控制器,并且主 VC 在情节提要中设置为根。您可以添加导航控制器,将其设置为应用程序的入口点,并将主 VC 设置为导航控制器的根 VC。之后,您将能够在 ViewWillAppear 中调用 fireTutorial 或设置模态 segue。
  • 我已将我的主 VC 嵌入到导航控制器中(在故事板中)。TutorialVC 现在在 viewWillAppear 中显示时会显示出来,但“闪烁”仍在发生。 (在 viewDidLoad 中显示的结果相同)。
【解决方案2】:

我采用了稍微不同的方法来解决这个问题。

我将主应用程序 VC 嵌入到导航控制器中,然后在 App Delegate didFinishLaunchingWithOptions 中推送 tutorialVC。

let tutorialVC = UIStoryboard(name: "FirstTutorial", bundle: nil)
let firstVC = tutorialVC.instantiateViewController(withIdentifier: "TutorialSBID") as UIViewController
if let navigationController = self.window?.rootViewController as? UINavigationController
{
    navigationController.pushViewController(firstVC, animated: false)
}
return true

【讨论】:

    【解决方案3】:

    将这段代码写在 viewWillAppear 或 viewWillLayoutSubviews() 中,而不是 viewDidAppear

    【讨论】:

    • 如果我将教程 VC 放在 viewWillAppear 中,它不会加载。它直接进入主应用程序界面。
    • 然后尝试在viewWillLayoutSubviews()中编写代码
    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多