在我的应用程序中,我有一个横向视图控制器,只要设备处于横向模式,就可以调用它。但问题是当我旋转回肖像时,它会变得混乱。 我在我的App代表中这样做:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[NSThread sleepForTimeInterval:1.5];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
// Override point for customization after application launch.
UIViewController *viewController1, *viewController2, *viewController3, *viewController4, *viewController5;
UIImage * logoImage = [UIImage imageNamed:NAVIGATION_LOGO_IMAGE];
self.navController.navigationItem.titleView = [[UIImageView alloc] initWithImage:logoImage];
self.navController.navigationItem.titleView.frame = CGRectMake(340,0 , 450, 55);
// Create initialized instance of UITabBarController
tabController = [[UITabBarController alloc] init];
NSMutableArray *tabs = [[NSMutableArray alloc] init];
// Create first UIViewController
viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil];
[viewController1 setTitle:@"Home"];
navController = [[UINavigationController alloc] initWithRootViewController:viewController1];
navController.navigationBar.tintColor = [UIColor blackColor];
[tabs addObject:navController];
viewController2 = [[TwitterDataLoad alloc] initWithNibName:@"TwitterDataLoad" bundle:nil];
//viewController2 = [[TwitterDataController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil];
[viewController2 setTitle:@"News"];
navController = [[UINavigationController alloc] initWithRootViewController:viewController2];
navController.navigationBar.tintColor = [UIColor blackColor];
[tabs addObject:navController];
viewController3 = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[viewController3 setTitle:@"Music"];
navController = [[UINavigationController alloc] initWithRootViewController:viewController3];
navController.navigationBar.tintColor = [UIColor blackColor];
[tabs addObject:navController];
viewController4 = [[ThumbNailViewController alloc] initWithNibName:@"ThumbNailViewController" bundle:nil];
[viewController4 setTitle:@"Gallery"];
navController = [[UINavigationController alloc] initWithRootViewController:viewController4];
navController.navigationBar.tintColor = [UIColor blackColor];
[tabs addObject:navController];
viewController5 = [[FifthViewController alloc] initWithNibName:@"FifthViewController" bundle:nil];
[viewController5 setTitle:@"Shows"];
navController = [[UINavigationController alloc] initWithRootViewController:viewController5];
navController.navigationBar.tintColor = [UIColor blackColor];
[tabs addObject:navController];
landscapeVC = [[LandscapeAboutViewController alloc] initWithNibName:@"LandscapeAboutViewController" bundle:nil];
infamous = [[InfamousViewController alloc]initWithNibName:@"InfamousViewController" bundle:nil];
NSArray *versionCompatibility = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ( 5 == [[versionCompatibility objectAtIndex:0] intValue] )
{
[[UITabBar appearance]setTintColor:[UIColor blackColor]];
[[UITabBar appearance]setSelectedImageTintColor:[UIColor whiteColor]];
}
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSString * popUpShown = [defaults objectForKey:@"PopUpShown"];
if (![popUpShown isEqualToString:@"yes"]) {
[self showAlertView];
}
[tabController setViewControllers:tabs];
self.window.rootViewController = tabController;
[self.window makeKeyAndVisible];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:)
name:UIDeviceOrientationDidChangeNotification object:nil];
return YES;
}
- (void) didRotate:(NSNotification *)notification
{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (UIDeviceOrientationIsLandscape(orientation)) {
if (self.window.rootViewController != landscapeVC) {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
//[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationIsLandscape(orientation)];
[self switchToLandScape];
}
}
else if (UIDeviceOrientationIsPortrait(orientation)){
if (self.window.rootViewController != tabController) {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationIsPortrait(orientation)];
[self switchToTabBar];
}
}
}
- (void)switchToTabBar {
self.window.rootViewController = tabController;
}
- (void)switchToLandScape {
self.window.rootViewController = landscapeVC;
}
答案 0 :(得分:0)
尝试继承UITabBarController并在该子类中实现新的iOS 6旋转委托方法。然后使用该子类作为根视图控制器,以便在iOS 6下实现更好的旋转控制。
答案 1 :(得分:0)
在标签栏控制器子类中指定:
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscape;
}
另一种选择是将其置于导航控制器子类中,然后将特定于景观的视图控制器嵌入该导航控制器中。