gpt4 book ai didi

ios - 使用 popToRootViewController 进行旋转

转载 作者:行者123 更新时间:2023-11-30 13:30:24 28 4
gpt4 key购买 nike

我有一个 viewController 层次结构(在 Storyboard中创建),具有以下允许的方向:

+---------------+       +------------------+       +------------------+
+ VC1 + + VC2 + + VC3 +
+ + -> + + -> + +
+ Portrait Only + + All orientations + + All orientations +
+---------------+ +------------------+ +------------------+

为了让允许的旋转根据所有这些 ViewController 的 supportedInterfaceOrientationsshouldAutorotate 方法进行工作,我创建了一个自定义的 UINavigationController子类,具有这个简单的实现:

public class SingleOrientationNavigationController: UINavigationController {

public override func shouldAutorotate() -> Bool {
if let topVC = topViewController {
return topVC.shouldAutorotate()
}
return false
}

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if let topVC = topViewController {
return topVC.supportedInterfaceOrientations()
}
return UIInterfaceOrientationMask.Portrait
}
}

当设备旋转时,会为 navigationController(这是我的应用程序的根 Controller )调用方法 shouldAutorotate,该方法返回最顶层 View Controller 的值。当我按下VC2和VC3时一切正常,它们可以自由旋转。

<小时/>

现在,我推送 VC2(纵向,因为 VC1 仅支持纵向),旋转屏幕(因为 VC2 支持所有方向),然后弹出到 Root View Controller 。我得到以下调试跟踪:

enter image description here

为 VC1 调用 supportedInterfaceOrientations 方法(在第 0 行和第 1 行),因此系统可以知道它需要旋转才能正确显示 VC1:旋转工作正常。

当我尝试使用 popToRootViewControllerAnimated 从 VC3 弹出到 VC1,而 VC3 处于横向模式时,就会出现问题。当与服务器的连接丢失时会发生这种情况,因此我必须返回到 Root View Controller 。在这种情况下,我无法获取之前的跟踪,因为未调用 supportedInterfaceOrientations(VC1 和 VC2 均未调用),并且 VC1 以横向显示。

如何从 VC3 直接弹出到 VC1,并使其以正确的方向显示?我知道我可以从 VC3 跳到 VC2,然后从 VC2 跳到 VC1,但如果可能的话,我想直接从 VC3 跳到 VC1。

最佳答案

我是 Stack 的新手,我希望现在回答这个问题还不算太晚,但我的情况与作者相同。想象一下,您有一个仅纵向的 VC4,如果您尝试从 VC3(横向)推送它,您的 VC4 也会以横向显示。看起来supportedInterfaceOrientations函数没有被调用...

为了解决你的问题VC3 => VC1我发现了一个“hack”https://stackoverflow.com/a/15057537/6257992 (我使用的是IOS 7方法)

我的实现与你相同。

  1. 创建一个 BlankViewController,覆盖自定义 NavigationController 中定义的 2 个方法
  2. 将链接中的代码添加到VC1的ViewWillAppear中,并将UIViewController替换为Blank对于“像样的”动画:

    • PopToRootViewController = true
    • PresentViewController = false
    • DismissViewController = true

PS:动画在手机上看起来比在模拟器上更好。

如果您发现更好的方法或者有什么意见请分享。

关于ios - 使用 popToRootViewController 进行旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36626296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com