willRotateToInterfaceOrientation 未被调用

Posted

技术标签:

【中文标题】willRotateToInterfaceOrientation 未被调用【英文标题】:willRotateToInterfaceOrientation not being called 【发布时间】:2009-10-04 12:17:47 【问题描述】:

我在视图控制器的shouldAutorotateToInterfaceOrientation 函数中返回YES,我可以看到使用断点返回YES,但是willRotateToInterfaceOrientation 方法没有被调用,也没有任何其他方法旋转法。返回YES 之后好像什么都没有发生!

有什么想法吗?

迈克

【问题讨论】:

【参考方案1】:

这个视图 viewController 是不是导航控制器的其他一些根视图控制器的子视图?如果是这样,那么调用不会传播到子视图控制器,所以这可能是您的视图不旋转的原因。

【讨论】:

我正在尝试处理作为导航控制器根目录的表视图控制器中的调用,导航控制器本身就是选项卡控制器中的选项卡。那是检测它的正确位置吗?【参考方案2】:

我遇到了类似的问题并看到了 Daniel 的回答,但是我在开发人员文档中找不到任何对此的确认。并不是我不相信答案,而是我真的不明白为什么定向调用不会传播。

有人给了我一个使用类似这样的技巧:

[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectOrientation) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

【讨论】:

将后半部分作为一个新问题提出,因为它不属于答案。没有人可以在这里为您提供帮助。 我发现我的问题与 OP 的问题太相似,无法提出新问题,这个技巧有效并解决了我的问题。我想知道更多是出于好奇而不是必要。不过还是谢谢。 您需要做的就是链接回此问题并在您的新问题中回答,然后提出您的其他问题。人们将能够阅读这个问题的背景来回答你的问题,我敢打赌你会从某人那里得到一个体面的答案。 Stack Overflow 不是传统的讨论论坛,答案中提出的问题往往会被删除以保持网站整洁。 我真的看不出他的问题和 OP 的问题有什么实质性区别。【参考方案3】:

要寻找的一件事是,我发现如果我在 [UINavigationController viewDidAppear] 中调用了 UIPopoverController,那么不会调用 willRotateToInterfaceOrientationdidRotateFromInterfaceOrientation。看起来UIPopoverController 是模态阻止旋转方法调用。

【讨论】:

【参考方案4】:

是的,我也是。好的,它不会在子视图控制器中被调用 - 必须传递它。可以处理。通知的想法很有效除了,你只会得到“did...”而不是“will...”(afaik),无论如何它是一个不应该存在的问题的混乱解决方案。

我的错误是在我的 loadView 中调用 [super loadView]。 Not supposed to do that。当我删除 [super loadView] 并自己分配视图时,willRotateToInterfaceOrientation 开始工作了。

真正奇怪的是[super loadView]子视图控制器中,而事件甚至没有到达顶部...

【讨论】:

【参考方案5】:

如果您没有在任何视图控制器中接收到willAutoRotateToInterfaceOrientation 的回调,请将视图控制器添加为您的根视图控制器的子视图控制器。

例如;假设self.viewController 是您的根视图控制器,childViewController 是您想要在其中获得自动旋转回调的视图控制器,添加以下代码行;

[self.viewController addChildViewController:childViewController];

实际上,将作为子视图控制器添加到任何获得旋转回调的视图控制器也可以。

希望对你有帮助。

【讨论】:

【参考方案6】:

苹果文档

在启动时,应用程序应始终将其界面设置为纵向。在 application:didFinishLaunchingWithOptions: 方法返回后,应用程序使用上述视图控制器旋转机制在显示窗口之前将视图旋转到适当的方向。

因此,如果您使用 TabBarViewController,请小心在 application:didFinishLaunchingWithOptions: 方法中设置所选视图。

【讨论】:

以上是关于willRotateToInterfaceOrientation 未被调用的主要内容,如果未能解决你的问题,请参考以下文章