iOS7 - 仅锁定标签栏内的某些视图控制器的方向?

n00*_*Dev 6 iphone xcode orientation ios ios7

我知道这个问题已被无数次问过,虽然我根本无法让它工作,但实际上没有答案可行,也许我没有正确地复制代码,但无论哪种方式它都不会工作.

无论如何,我的应用程序的视图控制器布局如下,请注意这是一个选项卡式应用程序,而不是一个View应用程序:

主标签栏控制器>分支到多个导航栏控制器(均引用同一个CustomNavigationController类)>在每个导航控制器下有许多UIViewControllers,其中一些引用自定义视图控制器类.(有关层次结构的直观表示,请参见pic) 查看控制器布局

我的问题是:如何才能将应用程序中所有页面的方向锁定为纵向模式,但是如果用户旋转设备,允许某些页面(UIViewControllers)能够旋转到横向?(上图中标有星号的页面是我想要允许旋转的页面)

请记住,我想允许旋转的视图控制器是导航控制器的子控制器,导航控制器也是标签栏控制器的子控制器.另外,请注意其中一个View控制器不在Navigation控制器下,它位于Tab Bar控制器下,但不确定这会影响多少.

非常感谢

来自我的应用程序的相关类的代码

标签栏控制器代码(注意这里没有有意义的代码,因为我从来没有用过这个类)

@interface TabBarController ()

@end

@implementation TabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}  
@end
Run Code Online (Sandbox Code Playgroud)

导航控制器类(也从来没有一个类

@interface NavigationBar ()
@end   
@implementation NavigationBar

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = @"NavigationController";
    }
    return self;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
Run Code Online (Sandbox Code Playgroud)

主页类(必须以肖像锁定)

@interface HomePage ()

@end

@implementation HomePage


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = @"HomePage";
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // If the condition is not true/not YES, than create and show alert.
    if (![[NSUserDefaults standardUserDefaults]
          boolForKey:@"didShowOneTimeAlert"]) {

        //Define and Edit the Alert details.
        UIAlertView *zoomTip = [[UIAlertView alloc] initWithTitle:@"Tips" message:@"On all web site and map pages, pinch in and out to zoom. \n \n On the 'Program' page, tap on a session to view more details." delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil];

        //Show the alert
        [zoomTip show];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"didShowOneTimeAlert"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    } // End if
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
Run Code Online (Sandbox Code Playgroud)

地图类(显示地图并且必须能够旋转的页面)

@interface MezzanineLevelMap ()
@end
@implementation MezzanineLevelMap
@synthesize scrollView, imageView;


-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return imageView;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Mezzanine Level"]];
    self.imageView = tempImageView;

    scrollView.maximumZoomScale = 1;
    scrollView.minimumZoomScale = .25;
    scrollView.clipsToBounds = YES;
    scrollView.delegate = self;
    [scrollView addSubview:imageView];
    scrollView.zoomScale = .25;

    // Change scroll view sizes according to the screen size
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

        CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height == 480) {
            [scrollView setFrame:CGRectMake(0, 5, 320, 475)];
        } else {
            [scrollView setFrame:CGRectMake(0, 5, 320, 563)];
        } // End if
    } // End if
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
Run Code Online (Sandbox Code Playgroud)

Ash*_*osh 0

在每个视图控制器中,您可以编写以下代码并根据要求返回是或否。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES/NO;
}
Run Code Online (Sandbox Code Playgroud)