视图加载期间iOS 6中的设备方向处理?

我有一个选项卡栏应用程序。 我正在使用XCode 4.3.3。 我用iOS6的东西升级到4.5.2。

我在每个视图的shouldAutorotateToInterfaceOrientation代码将检查当前的设备方向,并正确地放置所有的UI组件。

但升级到iOS 6后,此代码不执行。 我已经尝试了将近一天来解决这个问题,但没有运气。

我也试过了

 UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation]; 

viewLoadviewDidLoadviewWillAppear

如果我想在视图加载期间检查方向,并且在视图加载期间将UI组件放置到合适的位置,我该怎么做。 请给出您的build议。

谢谢

如果你想检查哪个是当前的方向,那么你只需在prifix.pch下面写一行

  #define isPortrait [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown 

然后在那里你想检查方向,写下面的条件

  if(isPortrait) { //portrait mode.... } else { //landscape mode.... } 

让我知道这是工作或不…

快乐的编码!

要检查ios6中的方向,你将不得不写下面的方法,并在你的info.plist中,你将不得不定义你想要的方向…

让我知道它是否工作!

快乐的编码!

  - (BOOL)shouldAutorotate{ return NO; } - (NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait;//you can write here which ever orientation you want.. } 

你可以像这样pipe理Oriantation:

 -(BOOL)shouldAutorotate { return YES; } 

并在ViewWillApear设备中每次检查ViewWillApear Oriantation:

 - (void)willRotateToOrientation:(UIInterfaceOrientation)newOrientation { if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) { if (newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight) { //set your landscap View Frame [self supportedInterfaceOrientations]; } } else if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)) { if(newOrientation == UIInterfaceOrientationPortrait || newOrientation == UIInterfaceOrientationPortraitUpsideDown){ //set your Potrait View Frame [self supportedInterfaceOrientations]; } } // Handle rotation } -(void)viewWillAppear:(BOOL)animated { [self willRotateToOrientation:[[UIDevice currentDevice] orientation]]; [super viewWillAppear:YES]; } 

UPDATE

可能人们使用检查设备的orientation像下面的方式把这一行ViewWillApear : –

 [[UIApplication sharedApplication] statusBarOrientation]; [[UIDevice currentDevice] orientation]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotated:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

 -(void)deviceRotated:(NSNotification*)notification { UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { //Do your stuff for landscap } else if(orientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { //Do your stuff for potrait } } 

在viewDidLoad方法你需要检查相同的,因此你需要编写的代码,除非它可能会影响视图,如果它不在肖像上。