iOS(iPhone / iPad)SDK – 应用程序不改变方向

在我的自定义选项卡栏应用程序中,即使强制旋转状态栏,方向也不会改变。 这是我的AppDelegate中的代码:

AppDelegate.h:

#import <UIKit/UIKit.h> #import "MBProgressHUD.h" @class exampleViewContoller; @class example1ViewController; @class example2ViewController; @class example3ViewController; @class example4ViewController; @interface <appname>AppDelegate : NSObject <UIApplicationDelegate, MBProgressHUDDelegate> { UIWindow *window; UITabBarController *rootController; exampleViewContoller *viewController; example1ViewController *viewController1; example2ViewController *viewController2; example3ViewController *viewController3; example4ViewController *viewController4; NSMutableData *responseData; NSMutableArray *tweets; MBProgressHUD *HUD; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UITabBarController *rootController; @property (nonatomic, retain) IBOutlet exampleViewContoller *viewController; @property (nonatomic, retain) IBOutlet example1ViewController *viewController1; @property (nonatomic, retain) IBOutlet example2ViewController *viewController2; @property (nonatomic, retain) IBOutlet example3ViewController *viewController3; @property (nonatomic, retain) IBOutlet example4ViewController *viewController4; @property (nonatomic, retain) NSMutableArray *tweets; @end 

AppDelegate.m:

  #import "<appname>AppDelegate.h" #import "exampleViewContoller.h" #import "example1ViewController.h" #import "example2ViewController.h" #import "example3ViewController.h" #import "example4ViewController.h" #import "SBJson.h" #define TMP NSTemporaryDirectory() @implementation <appname>AppDelegate @synthesize window = _window; @synthesize rootController; @synthesize viewController; @synthesize viewController1; @synthesize viewController2; @synthesize viewController3; @synthesize viewController4; @synthesize tweets; #pragma mark - #pragma mark Application lifecycle - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { CGFloat width = self.rootController.view.bounds.size.width; CGFloat height = self.rootController.view.bounds.size.height; UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, width, height)]; UIImage *imageView = [UIImage imageNamed:@"TabBarBackground.png"]; UIColor *kMainColor = [[UIColor alloc] initWithPatternImage:imageView]; [v setBackgroundColor:kMainColor]; [kMainColor release]; [self.rootController.tabBar insertSubview:v atIndex:0]; [imageView release]; [v release]; responseData = [[NSMutableData data] retain]; tweets = [NSMutableArray array]; NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:@"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=ENTER_USER_HERE&count=20"]]; [[NSURLConnection alloc] initWithRequest:request delegate:self]; NSAssert(nil != self.rootController, @"tab bar controller not hooked up!"); BOOL iPad = NO; #ifdef UI_USER_INTERFACE_IDIOM iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); #endif if (iPad) { self.viewController = [[[exampleViewContoller alloc] initWithNibName:@"exampleViewController_iPad" bundle:nil] autorelease]; self.viewController1 = [[example1ViewController alloc] initWithNibName:@"example1ViewController_iPad" bundle:nil] autorelease]; self.viewController2 = [[[example2ViewController alloc] initWithNibName:@"example2ViewController_iPad" bundle:nil] autorelease]; self.viewController3 = [[[example3ViewController alloc] initWithNibName:@"example3ViewController_iPad" bundle:nil] autorelease]; self.viewController4 = [[[example4ViewController alloc] initWithNibName:@"example4ViewController_iPad" bundle:nil] autorelease]; } else { self.viewController = [[[exampleViewContoller alloc] initWithNibName:@"exampleViewContoller_iPhone" bundle:nil] autorelease]; self.viewController1 = [[[example1ViewController alloc] initWithNibName:@"example1ViewController_iPhone" bundle:nil] autorelease]; self.viewController2 = [[[example2ViewController alloc] initWithNibName:@"example2ViewController2_iPhone" bundle:nil] autorelease]; self.viewController3 = [[[example3ViewController alloc] initWithNibName:@"example3ViewController_iPhone" bundle:nil] autorelease]; self.viewController4 = [[[example4ViewController alloc] initWithNibName:@"example4ViewController_iPhone" bundle:nil] autorelease]; } self.rootController.viewControllers = [NSArray arrayWithObjects:self.viewController, self.viewController4, self.viewController1, self.viewController3, self.viewController2, nil]; [viewController release]; [viewController1 release]; [viewController2 release]; [viewController3 release]; [viewController4 release]; #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 self.window.rootViewController = self.rootController; #else [self.window addSubview:rootController.view]; #endif [self.window makeKeyAndVisible]; HUD = [[MBProgressHUD alloc] initWithView:viewController.view]; [viewController.view addSubview:HUD]; [HUD show:NO]; HUD.delegate = self; HUD.labelText = @"Loading"; return YES; } //[---CODE CLIP---] - (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation { CGFloat width = self.rootController.view.bounds.size.width*2; CGFloat height = self.rootController.view.bounds.size.height; UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, width, height)]; UIImage *imageView = [UIImage imageNamed:@"TabBarBackground.png"]; UIColor *kMainColor = [[UIColor alloc] initWithPatternImage:imageView]; [v setBackgroundColor:kMainColor]; [kMainColor release]; [self.rootController.tabBar insertSubview:v atIndex:0]; [imageView release]; [v release]; } - (void)hudWasHidden { [HUD removeFromSuperview]; } //[---CODE CLIP---] - (void)dealloc { [_window release]; [rootController release]; [HUD release]; [super dealloc]; } @end 

问题是,当我在iOS模拟器中旋转设备时,应用程序不会旋转。 任何想法将不胜感激!

UPDATE

我也注意到,发射图像也不旋转(对于iPad,即iPhone不会做风景启动图像)。

注意JMANS

我重覆UITabBarController:

 @implementation UITabBarController (MyApp) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { if(self.selectedIndex==4) return (toInterfaceOrientation == UIInterfaceOrientationPortrait); else return (toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } @end 

我将开始在所有的视图控制器中包含这个:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } 

此外,请确保您在Info.plist中支持多个方向。

标签栏控制器和视图旋转

标签栏控制器默认支持纵向,不能旋转到横向,除非所有包含的视图控制器都支持这种方向。 当设备方向更改发生时,标签栏控制器查询其视图控制器的数组。 如果其中任何一个不支持该方向,则标签栏控制器不会改变其方向。