【问题标题】:shouldAutorotateToInterfaceOrientation doesn't work on first launch after fresh app installshouldAutorotateToInterfaceOrientation 在全新应用安装后首次启动时不起作用
【发布时间】:2011-02-20 13:41:27
【问题描述】:

当我正在开发的应用通过 Ad-Hoc 通过 iTunes 安装或直接构建到设备时,在第一次启动时,我的应用中唯一响应方向变化的视图控制器不会收到调用 shouldAutorotateToInterfaceOrientation: 并传入一个横向参数;调试表明它只被称为肖像。每次后续启动的行为都符合我的预期——也就是说,有对 shouldAutorotateToInterfaceOrientation: 的调用同时使用横向和纵向参数。在 iPhone 模拟器、iPhone 和 iPod touch 上都可以看到这种确切的行为。

所以我的问题是:为什么第一次启动应用程序时的方向通知会不同于后续每次启动时的方向通知?我是否误以为除了回复 shouldAutorotateToInterfaceOrientation: 之外,我无法控制方向变化?

在有问题的 ViewController 内部:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 返回是; }

viewDidLoadviewDidUnload 内部我(分别)得到:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 和 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

2010 年 7 月 6 日更新:

仍然没有解决问题的运气。我暂时放弃了这个问题,然后又回到了它,但在完全不同的情况下仍然看到了这个问题。有人吗?

2010 年 7 月 13 日更新:

来自苹果的View Controller Programming Guide

"...窗口对象完成了与更改当前方向相关的大部分工作。[...] 具体来说,它与根视图最近添加到或显示在窗口中的视图控制器一起使用. 换句话说,window 对象只适用于其视图显示的最前面的视图控制器..."

我在第一次启动时将根视图控制器添加到窗口中,与随后的每次启动相比,我认为这可能与此有关。不过,我还没有追溯到这里……只是一个想法。

在本次更新时,这件事已经获得了大约 175 次浏览……甚至没有人提出最遥远的晦涩建议?来吧,把东西扔出去。在这一点上,我愿意接受任何猜测或建议。我不在乎它是否愚蠢地晦涩难懂或可能无关紧要。

【问题讨论】:

  • 我在 UI 方向上遇到过各种各样的问题,并且看到很多报告说它在不同的版本中得到了修复。您要链接哪些库?也许尝试以后的库,看看是否更好。
  • iPhone OS 3.0 并链接到 i996.photobucket.com/albums/af85/jtrim/… 我将尝试增加我的构建目标,看看它是如何进行的
  • 您不需要在视图控制器中调用 begin/endGeneratingDeviceOrientationNotifications。 shouldAutorotateToInterfaceOrientation 将在不这样做的情况下被调用。
  • 是的,我知道这没有必要,但我只是把它放在那里看看发生了什么,我认为很有可能有人会建议在黑暗中拍摄输入答案,所以我把它包括在这里。
  • 我增加了构建目标,但没有看到任何变化。

标签: iphone notifications orientation autorotate


【解决方案1】:

从来没有解决过这个问题——我还没来得及解决这个问题就离开了遇到这个问题的公司。然而,当我离开时,我已经取得了很好的领先优势。我就这个问题联系了 Apple DTS,他们指出,要使自动旋转正常工作,视图堆栈中与自动旋转相关的所有 ViewController 都必须调用方法实现中的超级方法(即从 ViewController 的 viewDidLoad 中调用 [super viewDidLoad])。我不记得他们确切引用了哪些方法,但可能值得一试以确保您在适当的情况下正确调用 super

[编辑] 如果有人可以确认这一点,我会将其标记为已接受的答案。谢谢!

【讨论】:

    【解决方案2】:

    还要确保你设置:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return YES;}
    

    在您的应用中的 ALL ViewControllers.m 中,而不仅仅是您正在处理的一个(如果您有多个)。我一直在努力尝试让它用于 FirstViewController,但无论如何它都行不通。一旦我将上述代码添加到所有四个视图控制器中,它就开始正常工作(在所有四个中)

    【讨论】:

    • 如果你有一些不应该自动旋转的视图控制器怎么办?这当然是一个有效的场景。
    • 我猜,那时它不会适用。
    【解决方案3】:

    我遇到了类似的问题 - UIDevice.h 标头将 endGeneratingDeviceOrientationNotifications 和 beginGeneratingDeviceOrientationNotifications 列为“可嵌套”。事实证明我对这些方法的调用不平衡。

    我通过对 beginGeneratingDeviceOrientationNotifications 的以下更改快速解决了这个问题:

    if (![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多