4

我需要根据方向更改视图的图像背景。为此,我使用 statusBarOrientation 方法viewWillAppear

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    if (UIInterfaceOrientationIsPortrait(currentOrientation)) {
        NSLog(@"PORTRAIT");
    } else if (UIInterfaceOrientationIsLandscape(currentOrientation)) {
        NSLog(@"LANDSCAPE");
    }   
}

问题是控制台总是显示 PORTRAIT,即使 iPad 处于横向模式。相同的代码viewDidAppear可以正常工作,但是为时已晚,用户可以看到图像的变化。这让我认为 statusBarOrientation 的正确状态仍然不可用viewWillAppear,但我已经阅读了其他一些问题,该代码应该在那里工作。

4

3 回答 3

12

尝试

int type = [[UIDevice currentDevice] orientation];
    if (type == 1) {
        NSLog(@"portrait default");
    }else if(type ==2){
        NSLog(@"portrait upside");
    }else if(type ==3){
        NSLog(@"Landscape right");
    }else if(type ==4){
        NSLog(@"Landscape left");
    }
于 2012-06-11T14:17:32.880 回答
3

您不应该使用 statusBarOrientation 来确定应用程序的当前方向。根据苹果的文档:http: //developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html

此属性的值是一个常数,指示接收器状态栏的方向。有关详细信息,请参阅 UIInterfaceOrientation。设置此属性会将状态栏旋转到指定的方向,而不会为过渡设置动画。但是,如果您的应用程序具有可旋转的窗口内容,则不应使用此方法任意设置状态栏方向。如果设备改变方向,此方法设置的状态栏方向不会改变。

尝试使用 UIViewController 的interfaceOrientation属性来获取当前应用程序的方向。

于 2012-06-11T14:39:24.827 回答
0

下面是一个有用的代码片段,用于记录设备的 interfaceOrientation:

NSArray* orientations = @[ @"nothing", @"UIInterfaceOrientationPortrait", @"UIInterfaceOrientationPortraitUpsideDown", @"UIInterfaceOrientationLandscapeLeft", @"UIInterfaceOrientationLandscapeRight”];
NSLog(@"Current orientation := %@", orientations[self.interfaceOrientation]);

希望这可以帮助某人!

于 2014-04-21T22:53:53.350 回答