【发布时间】:2014-01-08 08:02:51
【问题描述】:
我知道这个问题已经被问过无数次了,虽然我根本无法让它工作,实际上没有任何答案有效,也许我没有正确复制代码,但无论哪种方式它不会工作。
无论如何,我的应用程序的视图控制器布局如下,注意这是一个选项卡式应用程序,而不是单个视图应用程序:
主标签栏控制器 > 分支成多个导航栏控制器(都引用同一个 CustomNavigationController 类) > 每个导航控制器下都有许多 UIViewController,其中一些引用自定义视图控制器类。 (有关层次结构的可视化表示,请参见图片)
我的问题是:我怎样才能将我的应用程序中所有页面的方向锁定为仅纵向模式,但是允许一些页面(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
导航控制器类(也从来没有这个类
@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
首页类(必须纵向锁定)
@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
地图类(显示地图且必须能够旋转的页面)
@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
【问题讨论】:
标签: ios iphone xcode ios7 orientation