0

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

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

在有问题的 ViewController 内部:

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

在里面,viewDidLoadviewDidUnload有(分别):

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

2010 年 7 月 6 日更新:

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

2010 年 7 月 13 日更新:

从 Apple 的View Controller Programming Guide

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

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

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

4

3 回答 3

2

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

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

于 2010-11-03T02:41:24.507 回答
0

also make sure you set:

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

in ALL ViewControllers.m in your app, not just one you're working on (if you have more than one). I was struggling trying to get it going for the FirstViewController, but it wouldn't work no matter what. As soon as I added the above code to all four view controllers, it started to work just fine (in all four)

于 2010-11-16T17:40:14.127 回答
0

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

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

if (![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
于 2011-09-30T15:57:11.140 回答