Questions tagged «autorotate»

25
如何在iOS 8中强制视图控制器定向?
在iOS 8之前,我们将以下代码与supportedInterfaceOrientations和shouldAutoRotate委托方法结合使用,以将应用程序方向强制为任何特定方向。我使用下面的代码片段以编程方式将应用程序旋转到所需的方向。首先,我要更改状态栏的方向。然后,仅呈现并立即消除模态视图会将视图旋转到所需的方向。 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES]; UIViewController *c = [[UIViewController alloc]init]; [self presentViewController:vc animated:NO completion:nil]; [self dismissViewControllerAnimated:NO completion:nil]; 但这在iOS 8中失败了。此外,我在堆栈溢出中看到了一些答案,有人建议我们应该从iOS 8开始始终避免这种方法。 更具体地说,我的应用程序是通用类型的应用程序。共有三个控制器。 First View控制器 -它应支持iPad中的所有方向,并且仅支持iPhone中的纵向(按下主页按钮)。 Second View控制器 -在所有情况下都应仅支持横向景观 Third View控制器 -在所有情况下都仅支持横向景观 我们正在使用导航控制器进行页面导航。从第一个视图控制器的按钮单击动作开始,我们将第二个推入堆栈。因此,当第二个视图控制器到达时,无论设备方向如何,应用程序都应仅锁定横向视图。 下面是我shouldAutorotate和supportedInterfaceOrientations第二个和第三个视图控制器中的方法。 -(NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskLandscapeRight; } -(BOOL)shouldAutorotate { return NO; } 有没有针对此问题的解决方案或将视图控制器锁定在iOS 8特定方向的更好方法,请帮忙!

15
iOS 6:如何将某些视图限制为纵向视图并允许其他视图旋转?
我有一个iPhone应用程序,该应用程序使用UINavigationController来显示向下钻取的界面:首先是一个视图,然后是另一个视图,最多可以看到四个层次。我希望将前三个视图限制为纵向,并且仅应允许最后一个视图旋转为横向。从第四视图返回到第三视图时,我希望所有内容都旋转回纵向。 在iOS 5中,我仅shouldAutorotateToInterfaceOrientation:在每个视图控制器中定义为允许的方向返回YES。一切工作均如上所述,包括即使从视图控制器#4返回到#3时设备保持横向保持垂直,也可以返回到肖像。 在iOS 6中,所有视图控制器都会旋转到横向,从而打破了原本不希望的视图控制器。iOS 6发行说明说 更多责任转移到应用程序和应用程序委托。现在,iOS容器(例如UINavigationController)不咨询其子级来确定是否应自动旋转。[...]每当设备旋转或以全屏模式呈现方式呈现视图控制器时,系统都会向最上方的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器从其shouldAutorotate方法返回YES时,才检索受支持的方向。[...]系统通过将应用程序的supportedInterfaceOrientationsForWindow:方法返回的值supportedInterfaceOrientations与最上方的全屏控制器的方法返回的值相交,确定是否支持方向。 所以我继承UINavigationController了类,给了我MainNavigationController一个布尔属性,landscapeOK并用它返回的允许方向supportedInterfaceOrientations。然后在每个视图控制器的viewWillAppear:方法中,我都有这样的一行 [(MainNavigationController*)[self navigationController] setLandscapeOK:YES]; 告诉我MainNavigationController所需的行为。 问题来了:如果我现在以纵向模式导航到我的第四个视图,然后将手机翻转过来,它将旋转为横向。现在,我按“后退”按钮返回到我的第三个视图,该视图只能以纵向显示。但是它不会旋转回去。我如何做到这一点? 我试过了 [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait] 在viewWillAppear我的第三个视图控制器的方法中,但是它什么也没做。这是错误的调用方法还是错误的调用位置,还是我应该以完全不同的方式实现整个过程?
99 ios  iphone  ios6  autorotate 

18
如何在iOS 7中以编程方式设置设备方向?
我正在使用自动布局在iPad应用程序上工作,如果用户启用了某种模式(“平视”模式),则我仅希望支持纵向(或纵向颠倒)方向,并且如果设备处于风景,我想自动切换到人像模式。 在顶视图控制器中,我具有以下内容: - (NSUInteger) supportedInterfaceOrientations { if (self.modeHeadsUp) { return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; } else { return UIInterfaceOrientationMaskAll; } } - (BOOL) shouldAutorotate { return TRUE; } 根据我在其他地方看到的答案,答案似乎是我应该使用“ application setStatusBarOrientation”。因此,在用户选择“抬头”模式的方法中,我包括: UIApplication *application = [UIApplication sharedApplication]; [application setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES]; 但是,这似乎没有任何作用。虽然我可以物理移动设备以使其旋转成纵向,但它不会自动旋转。 实际上,当在运行上述代码以尝试以编程方式设置方向之后以横向模式运行时,当我使用以下代码查询应用程序“ statusBarOrientation”时,对于横向而言,它保持在“ 4”: UIApplication *application = [UIApplication sharedApplication]; int orientation = …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.