【问题标题】:Why does my app rotate without animation?为什么我的应用旋转时没有动画?
【发布时间】:2016-09-21 13:12:53
【问题描述】:

我有一个带有动画闪屏和主界面的应用。

为了从启动画面过渡到主界面,我使用了以下代码:

presentViewController(mainViewController, true) {
    UIApplication.sharedApplication.keyWindow.rootViewController = mainViewController
}

但显然这种方法破坏了自转(我花了一段时间才找到那个)。现在我遇到的问题是这种自动旋转与动画无关。

我猜这与动画无关,因为旧的视图控制器仍然位于另一个视图控制器下方,它只是转发新的方向。

我如何正确地从一个视图控制器过渡到下一个视图控制器,同时能够销毁旧的视图控制器并保持旋转?

编辑:我注意到当我关闭我的应用程序时我的主屏幕会旋转(从它的启动方向到我关闭它时应用程序所处的方向)

【问题讨论】:

    标签: ios uiviewcontroller rootviewcontroller


    【解决方案1】:

    除了凯末尔所说的,我发现了我的具体问题:

    我真的不明白为什么会出现这个问题。我在Info.plist 中设置了一个故事板作为主界面(我忽略了这一点,因为我不需要它)。在我的AppDelegate.finishedLaunching 中,我创建了一个新窗口并设置了它的根视图控制器,然后我将其设置为关键窗口。删除AppDelegate 或Info.plist 中的窗口设置可以解决问题。

    【讨论】:

      【解决方案2】:

      根据 UIWindow 文档;

      如果窗口有一个现有的视图层次结构,旧的视图是 在安装新的之前删除。

      来源链接 -> here

      所以,系统会在决定不再需要您的第一个 RootViewController 时自动销毁。你可以这样处理过渡;

      if var topRootController = UIApplication.sharedApplication().keyWindow?.rootViewController {
          while (topRootController.presentedViewController != nil) {
              topRootController = topRootController.presentedViewController!
          }
          topRootController.presentViewController(homeController, animated: true, completion: nil)
      }
      

      【讨论】:

      • 这具有相同的结果(旋转发生没有动画)并打印:Warning: Attempt to present <MenuViewController: 0x12d9cd920> on <SplashScreenViewController: 0x12d857740> whose view is not in the window hierarchy!
      • 仍然没有动画。
      • 所以我发现了这个问题(但我真的不明白为什么会出现这个问题)。我在Info.plist 中设置了一个故事板作为主界面(我忽略了这一点,因为我不需要它)。在我的AppDelegate.finishedLaunching 中,我创建了一个新窗口并设置了它的根视图控制器,然后我将其设置为关键窗口。删除 AppDelegate 或 Info.plist 中的窗口设置可以解决问题。
      • @vrwim:您可以将其重新发布为答案而不是评论吗?这是我(相同)问题的正确解决方案。这如何禁用所有旋转动画? O.o 非常感谢!
      • @fruitcoder 完成。我真的不知道为什么这会禁用旋转。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      相关资源
      最近更新 更多