2

我有一个标签栏应用程序。我使用的是 XCode 4.3.3。我已经用 iOS6 的东西升级到 4.5.2。

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

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

我也试过

UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation]; 

viewLoad, viewDidLoad,viewWillAppear

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

谢谢

4

4 回答 4

11

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

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

然后在你想检查方向的地方,写下如下的条件

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

让我知道它是否有效...

快乐编码!

于 2013-01-07T12:10:18.963 回答
2

要在 ios6 中检查方向,您必须编写以下方法,并且在 info.plist 中,您必须定义您想要的方向...

让我知道它是否有效!

快乐编码!!!!

   - (BOOL)shouldAutorotate{
     return NO;
   }

   - (NSUInteger)supportedInterfaceOrientations{
      return UIInterfaceOrientationMaskPortrait;//you can write here which ever orientation you want..
   }
于 2013-01-07T04:33:55.320 回答
2

您可以这样管理 Orientation:-

-(BOOL)shouldAutorotate
{
    return YES;
}

并每次检查ViewWillApear设备方向,例如:-

- (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];
    }

更新

很可能人们使用下面这样的检查设备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

    }

}
于 2013-01-07T05:06:37.763 回答
0

在 viewDidLoad 方法中,您需要检查是否相同,因此您需要编写代码,除非它可能会影响视图,如果它不在纵向上。

于 2013-10-24T16:13:03.780 回答