iOS(iPhone / iPad)SDK - 应用程序不更改方向 [英] iOS (iPhone/iPad) SDK - Application not changing orientation

查看:74
本文介绍了iOS(iPhone / iPad)SDK - 应用程序不更改方向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



AppDelegate.h:

  #import< UIKit / UIKit.h> 
#importMBProgressHUD.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
#importexampleViewContoller.h
#importexample1ViewController.h
#importexample2ViewController.h
#importexample3ViewController.h
#importexample4ViewController.h
#importSBJson.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应用程序生命周期

- (BOOL)应用程序:(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!);

BOOL iPad = NO;
#ifdef UI_USER_INTERFACE_IDIOM
iPad =(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad);
#endif

if(iPad){
self.viewController = [[[viewViewContoller alloc] initWithNibName:@exampleViewController_iPadbundle:nil] autorelease];
self.viewController1 = [[example1ViewController alloc] initWithNibName:@example1ViewController_iPadbundle:nil] autorelease];
self.viewController2 = [[[[example2ViewController alloc] initWithNibName:@example2ViewController_iPadbundle:nil] autorelease];
self.viewController3 = [[[example3ViewController alloc] initWithNibName:@example3ViewController_iPadbundle:nil] autorelease];
self.viewController4 = [[[example4ViewController alloc] initWithNibName:@example4ViewController_iPadbundle:nil] autorelease];
} else {
self.viewController = [[[exampleViewContoller alloc] initWithNibName:@exampleViewContoller_iPhonebundle:nil] autorelease];
self.viewController1 = [[[example1ViewController alloc] initWithNibName:@example1ViewController_iPhonebundle:nil] autorelease];
self.viewController2 = [[[example2ViewController alloc] initWithNibName:@example2ViewController2_iPhonebundle:nil] autorelease];
self.viewController3 = [[[example3ViewController alloc] initWithNibName:@example3ViewController_iPhonebundle:nil] autorelease];
self.viewController4 = [[[example4ViewController alloc] initWithNibName:@example4ViewController_iPhonebundle: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 p>

我覆盖UITabBarController:

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


解决方案

我会从所有的视图控制器开始:

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

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


In my custom Tab Bar Application, the orientation never seems to change, even if I force rotate the status bar. Here is my code in my 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

The problem is that when I rotate the device in iOS Simulator, the application won't rotate. Any ideas would be much appreciated!

UPDATE

I have also noticed that the launch image is also not rotating (for iPad that is - iPhone doesn't do landscape launch images).

NOTE FOR JMANS

I overrode UITabBarController:

@implementation UITabBarController (MyApp)

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

解决方案

I would start by including this in all of your view controllers:

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

Also, make sure that you are supporting multiple orientations in your Info.plist.

这篇关于iOS(iPhone / iPad)SDK - 应用程序不更改方向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆