2012-10-10 29 views
0

在我的應用程序中,我有一個橫向視圖控制器應該在設備處於橫向模式時被調用,這很好。但問題是,當我旋轉回肖像時,它變得混亂起來。 我在我的應用程序委託這樣做:如何使用UITabBarController解決iOS 6中的方向問題?

- (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

嘗試子類的UITabBarController和實施新的iOS在該子類6旋轉委託方法。然後使用該子類作爲您的根視圖控制器爲更好的旋轉控制的iOS 6

0

下在你的標籤欄控制器的子類指定:

- (NSUInteger)supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

另一種選擇是放置在這一個導航控制器子類,然後在導航控制器中嵌入特定於景觀的視圖控制器。