8

我希望我的几个应用程序视图控制器在 iOS 6.0 中不旋转。这就是我为使 iOS 6 中的旋转成为可能所做的事情:

1.) 在 application:didFinishLaunchingWithOptions 中设置 windows rootviewController:

self.window.rootViewController = self.tabBarController;

2.)在我的目标中(在 XCode 中)设置“支持的界面方向”,这样我就可以使用所有方向

3.) 实现了新的 iOS 6.0 旋转功能

- (BOOL) shouldAutorotate {

    return YES;
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskAll;
}

4.) 由于某些原因,我将 UINavigationController 子类化并实现了这些新功能,并使用这个新的 NavigationController 代替了原来的。

到目前为止一切顺利,一切正常,所有视图控制器现在都能够旋转到每个方向。现在我想要几个 viewController 不旋转,只保持纵向。但是当我像这样在那些特定的视图控制器中设置新的旋转方法时,它仍然会旋转到每个方向:

- (BOOL) shouldAutorotate {

    return NO;
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskPortrait;
}

像上面那样设置导航控制器的旋转功能也不会改变任何东西。(所有视图控制器都可以旋转到每个方向)

我究竟做错了什么?

编辑:

同样设置首选的 Interfaceorientation 不会改变任何东西:

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {

    return UIInterfaceOrientationMaskPortrait;
}
4

3 回答 3

11

如果您希望我们所有的导航控制器都尊重顶视图控制器,您可以使用一个类别。我发现它比子类化更容易。

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

@end
于 2012-09-25T17:24:59.090 回答
0

这对我有用:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return NO;
}
于 2012-09-21T08:10:57.040 回答
0

您需要创建 UITabBarController 的类别以支持自动旋转

.h 文件的代码如下

@interface UITabBarController (autoRotate)<UITabBarControllerDelegate>

    -(BOOL)shouldAutorotate;
    - (NSUInteger)supportedInterfaceOrientations;

@end

.m 文件的代码如下

-(BOOL)shouldAutorotate {

    AppDelegate *delegate= (AppDelegate*)[[UIApplication sharedApplication]delegate];
    return [delegate.tabBarController.selectedViewController shouldAutorotate];
}


- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

注意:AppDelegate 的名称将更改为您项目的 AppDelegate 文件名。

于 2012-11-29T05:37:02.383 回答