1

我已经覆盖了我的 UINavigationController 来实现这些方法:

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

现在从我的第一个视图来看,我在这里模态地展示这个 MSNavigationPaneViewController ,它就像一个 Facebook 侧滑动标签栏控制器。

我需要在此处显示的 1 个视图控制器仅显示横向,而应用程序的其余视图仅显示纵向。

因此,在我添加的所有其他视图控制器中:

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

在我想要的景观中,我添加了:

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

然而,我所有的观点都在旋转。

如果我shouldRotate在这些其他视图上更改为 NO,那么它们会停留在 Portrait 并且我想要成为 Landscape 的视图可以旋转,但是我无法让它自行旋转。此外,一旦旋转,如果我回到另一个视图,shouldRotate = NO;它就无法旋转回纵向。

我已经在这工作了几个小时了,无法让它工作。

谢谢

编辑 - - -

我现在有这一半的工作,并开始了一个新问题,让自动旋转在这里工作

4

3 回答 3

5

您似乎对在 shouldAutorotate 中返回的内容感到困惑。使用以下代码作为示例。

由于 iOS 正在调用应用程序的 shouldAutorotate 以响应来自加速度计的事件,因此它已经知道新的方向;如果您的应用回答“是”,则 iOS 可以根据支持的列表检查当前方向,并在您的应用不查询当前方向的情况下做出决定。

// iOS 6

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

此外,您可以让呈现模态视图控制器的视图控制器通知它旋转。使用:presentViewController:animated:completion: 呈现视图控制器。presentModalViewController:animated: 如果您偶然使用它,则不推荐使用它。

如果添加application:supportedInterfaceOrientationsForWindow:,请确保遵循下面的代码指南。该文档指出,如果您supportedInterfaceOrientations在 VC 上实现它应该覆盖应用程序委托。但是,人们已经注意到,如何将其添加rootViewController到主窗口会有所不同。

利用:

window.rootViewController = viewController

代替:

[window addSubview:viewController.view];
于 2012-12-17T23:37:14.157 回答
2

我是这样做的

-(BOOL) shouldAutorotate{
    return YES;
}

-(NSUInteger) supportedInterfaceOrientations{
    if ([self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) {
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait;
}

确保您已单击 Xcode 中的方向按钮以启用所需的方向并在supportedInterfaceOrientations 方法中返回方向。

于 2012-12-18T07:05:32.390 回答
1

首先,确保您已单击 Xcode 中的方向按钮以启用所需的方向。然后花几个小时在谷歌上搜索人们在 iOS 6 中遇到的所有错误和问题。再花几个小时尝试各种技术。

这篇文章包含一些线索,但远非最终定论。

特别注意,您现在必须识别“根视图控制器”并将大部分(但不是全部)旋转控件集中在那里,而不是在每个视图控制器中实现它。

于 2012-12-17T23:57:50.143 回答