在iOS7和iOS8中自动旋转

时间:2014-12-26 13:02:34

标签: ios objective-c ios8 autorotate landscape-portrait

我正在开发一个处于纵向模式的应用程序。 但是我希望一个视图控制器应该以横向和纵向模式显示。

我尝试了以下代码,但它不起作用(未调用)

- (BOOL) shouldAutorotate
{
    return NO;
}
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return UIInterfaceOrientationMaskPortrait;
}

1 个答案:

答案 0 :(得分:0)

首先,您需要在plist中设置应用支持的所有方向,这可以在' General'项目中的选项卡"部署信息",例如: enter image description here

然后,您可以使用方法supportedInterfaceOrientations

我假设您以模态方式呈现视图控制器,因此只需在呈现的viewController上覆盖它,它只需要在纵向使用:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

并在你提出的viewController中,它也应该支持横向,使用:(或你想要的任何方向掩码)

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

P.S - 对于以模态方式呈现的viewController和推入navigationController堆栈的viewController,存在不同的行为:

  • modalViewController 会调用自己的supportedInterfaceOrientations,并支持这些方向
  • pushViewController 会调用其navigationController supportedInterfaceOrientations,并支持这些方向。

所以,如果你以模态方式呈现viewController,你需要覆盖它自己的supportedInterfaceOrientations,但如果你推动这个viewController,你需要在navigationController中设置一些BOOL属性,这样它就会知道哪个方向为支持。 我建议你以模态方式呈现这个viewController,将modalViewController用于不同的设备方向更自然。

PS#2 :关于shouldAutorotate:如果它返回'否',则不会调用supportedInterfaceOrientations,所以返回'是& #39 ;.它只说,如果设备旋转时自动旋转。如果它返回' NO',则需要显式旋转viewController。

嗯,我希望我帮助过,并没有写出一个完全不符合你要求的答案......:)