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

时间:2011-08-06 23:15:51

标签: iphone ios cocoa-touch 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模拟器中旋转设备时,应用程序不会旋转。任何想法将不胜感激!

更新

我也注意到发布图像也没有旋转(对于iPad来说 - iPhone不会执行横向启动图像)。

为JMANS注意

我覆盖了UITabBarController:

@implementation UITabBarController (MyApp)

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

2 个答案:

答案 0 :(得分:8)

我首先将其包含在所有视图控制器中:

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

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

答案 1 :(得分:4)

标签栏控制器和视图旋转

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