如何在iOS中处理不同的方向

添加:您可以在github ios6rotations上访问此项目


抱歉,有人问有关iOS 6屏幕旋转的问题,但这确实让我很痛苦。而且我仍然无法完全理解它-由于某些原因,它在某些情况下的行为有所不同。

我的测试应用程序中具有以下简单的视图层次结构: 

http://img.mukewang.com/5d8c27060001ffa412890594.jpg

我要实现的目标是- 将蓝色控制器仅横向放置,将红色控制器仅纵向放置

我有一个UINavigationController的子类,里面有这样的代码:

@implementation CustomNavController- (BOOL)shouldAutorotate{
    return [[self.viewControllers lastObject] shouldAutorotate];}- (NSUInteger)supportedInterfaceOrientations{
    return  [[self.viewControllers lastObject] supportedInterfaceOrientations];}- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];}@end

在我的蓝色控制器中,我实现了这一点:

- (BOOL)shouldAutorotate {
    return YES;}- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;}

在红色控制器中:

- (BOOL)shouldAutorotate {
    return YES;}- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;}

现在,我有以下行为:

  1. 应用在横向模式下启动(确定)

  2. 当我按下按钮时,我的红色控制器也按横向显示(这不行,因为必须在“人像”中显示)

  3. 它成功旋转为纵向但不向后旋转为横向

  4. 如果我将红色控制器留在人像模式下,则我的蓝色控制器(仅限横向)会以人像模式显示。

PS我所有的旋转方法(上面发布的)都被正常调用(顺便说一下,为什么这些方法在每次屏幕转换时都会被调用多次-5-6次)

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 不被推叫

所有(除portraitUpsideDown外)方向都包含在plist中。

问题是-如何在每个控制器中强制旋转到支持的方向?

我建议您在此处发布(作为答案)任何100%正常工作的代码来处理ios6中的旋转(例如,如果您的iPad使用SplitController的话)-我会将这个问题保留在收藏夹中,以在需要时将它们全部放在一个位置处理一些特定情况。干杯!

添加:请不要将此作为从风景到肖像的答案发布我希望有一种更优雅的方法。


鸿蒙传说
浏览 545回答 3
3回答

慕村225694

我的两分钱价值。您可以快速显示一个空的透明模式视图,然后将其关闭,这可以作为快速解决方法,方法是在ViewController和ViewControllerSecond类的ViewDidLoad:或viewWillAppear:上。此外,在情节提要中,您可以将ViewController类的方向设置为在视觉上呈现风景。

MYYA

使用此行以编程方式更改方向... 工作100%[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];并且在那时添加此行时,会出现一个警告,要删除此警告,只需在实现文件的顶部添加以下代码。@interface UIDevice (MyPrivateNameThatAppleWouldNeverUseGoesHere)- (void) setOrientation:(UIInterfaceOrientation)orientation;@end然后在波纹管方法中,如果需要,只需编写此代码。- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{     // Return your supported orientations  if (currentMainView==blueOne) {         return toInterfaceOrientation== UIInterfaceOrientationPortrait;     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS