【问题标题】:iOS6 rotate methods not called when launching in landscape在横向启动时未调用 iOS6 旋转方法
【发布时间】:2012-10-05 12:35:10
【问题描述】:

首先让我说在应用打开后在 iOS6 中旋转视图时我没有遇到问题。这个问题只发生在我第一次在横向启动应用程序时。新的 shouldAutorotatesupportedInterfaceOrientations 方法在启动时都会被调用,但是不会调用任何旋转方法,例如 willRotateToInterfaceOrientation:duration:。 (shouldAutorotate 总是返回 YES,supportedInterfaceOrientations 总是返回 UIInterfaceOrientationMaskAll)

在 iOS5 中,启动时“第一个”方向为横向是自动处理的。有没有解释为什么设备不会在 iOS6 中调用第一次横向旋转? (我正在检查的视图控制器是窗口/应用程序委托的根控制器)。

提前感谢您对此提供的任何帮助和见解。

【问题讨论】:

    标签: objective-c ios5 rotation ios6


    【解决方案1】:

    您现在应该使用viewWillLayoutSubviews 方法而不是willRotateToInterfaceOrientation:duration:。原因是因为willRotateToInterfaceOrientation:duration:在很多情况下都不能保证被调用。

    这在iOS6 release notes 等地方都有说明。

    【讨论】:

    • 我实际上正在计划一些重写,以便更好地利用 viewWillLayoutSubviews,因为正如你所说,它是更可靠的地方......嗯......布置子视图。当我开始时,我对如何正确使用它(以及几乎所有 iOS)知之甚少。感谢发行说明中的​​提醒。
    【解决方案2】:

    我想由于界面实际上并没有旋转,因此没有调用该方法。

    如果你想根据方向做一些设置,你有没有想过使用视图控制器的intefaceOrientation 属性?

    【讨论】:

    • 好点。我还没有考虑在 viewDidLoad 之类的东西中使用 interfaceOrientation 来做我想做的事。我总是依靠第一次轮换来调用。我会看看我能不能让它按照我想要的方式工作。
    • 是的,最终得到了一个简单的修复。我只是将我的一些初始化移动到一个新方法,并根据当前的 interfaceOrientation 值在加载时调用它。接受这个作为我的答案,尽管我仍然对为什么在启动时不再调用旋转方法感到好奇。但是,嘿,问题已解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多