1

我无法弄清楚如何在 iOS 6 上处理设备旋转。当设备旋转时,我有三件事需要单独更改。

  • 我有一个处理多个子 UIViewControllers 或 UINavigationControllers 的父 UIViewController(它基本上是一个自定义的 UITabBarController)。我不希望这个旋转。
  • 这些子视图控制器中的每一个都将根据自己的设置旋转或不旋转。(我想要一些旋转,一些不旋转)。
  • 在标签栏中,我希望每个标签图标(一个 UIView)旋转到方向。

我将如何在 iOS 6 中实现这一点,我在 iOS 5 中得到了一切工作。

这是我到目前为止所拥有的:

在父 UIViewController 中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

- (BOOL)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

在子视图控制器中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
        return YES;
}

- (BOOL)shouldAutorotate
{
        return YES;
}

- (BOOL)supportedInterfaceOrientations
{
        return UIInterfaceOrientationMaskAll;
}
4

2 回答 2

1

要正确支持 iOS6,还有更多内容。iOS 6 发行说明概述了一些事情:

https://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html

这一点可能有用:

为了兼容性,仍然实现 shouldAutorotateToInterfaceOrientation: 方法的视图控制器不会获得新的自动旋转行为。(换句话说,它们不会回退到使用应用程序、应用程序委托或 Info.plist 文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation: 方法用于合成将由 supportedInterfaceOrientations 方法返回的信息.

但您也应该看看 WWDC 2012 的 Session 236 - The Evolution of View Controllers。

于 2012-09-27T10:31:23.390 回答
0

如果要在导航堆栈中支持不同的方向,则必须先继承 UINavigationController 并覆盖supportedInterfaceOrientations。

- (NSUInteger)supportedInterfaceOrientations
{
    //I want to support portrait in ABCView at iPhone only.
    //and support all orientation in other views and iPad.

    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
    {
        // find specific view which you want to control.
        if ([[self.viewControllers lastObject] isKindOfClass:[ABCView class]])
        {
            return UIInterfaceOrientationMaskPortrait;
        }
    }

    //support all
    return UIInterfaceOrientationMaskAll;
}
于 2013-04-26T03:21:17.677 回答