UIInterfaceOrientation错误?

时间:2010-10-29 11:05:54

标签: iphone objective-c

在我的iPhone应用程序中,我需要检测当前的方向,我必须确定我是在纵向还是横向。我使用这段代码:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
     NSLog(@"portrait");
     ...
} else {
     NSLog(@"landscape");
     ...
}

当我的iPhone在我手中时,一切都很好。 但当我把它放在桌面上并运行应用程序时,内容以纵向模式显示在屏幕上,我的代码转到其他地方, NSLog打印横向。 / p>

我的考试不完整吗?如何防止这种情况?

编辑:测试在我的控制器viewDidLoad方法中执行,我的应用程序处理旋转。

3 个答案:

答案 0 :(得分:3)

UIDevice.orientation属于UIDeviceOrientation类型,是UIInterfaceOrientation的超集。您可能获得了值UIDeviceOrientationFaceUp

这强调了是的,你的测试是不完整的。你应该写这样的东西:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
     NSLog(@"portrait");
     ...
} else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
     NSLog(@"landscape");
     ...
} else {
     NSLog(@"WTF? %d", orientation);
     assert(false);
}

然后,你会知道你是否错过了什么。

答案 1 :(得分:2)

UIDevice.orientation可以返回设备是平的还是颠倒的(不是倒置的肖像,倒置在脸上)。而是在根视图控制器上调用UIViewController.interfaceOrientation。

答案 2 :(得分:0)

我建议使用UIDeviceOrientationIsValidInterfaceOrientation(orientation)

它会告诉您它是否是有效的方向(有效的是横向或纵向,而不是FaceUp / FaceDown / UnKnown)。然后你就可以把它看作是它的肖像,如果它是未知的。

我就是这样做的:

if (UIDeviceOrientationIsValidInterfaceOrientation(interfaceOrientation) && UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
    // handle landscape
} else {
    // handle portrait
}