在我的iPhone应用程序中,我需要检测当前的方向,我必须确定我是在纵向还是横向。我使用这段代码:
UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
NSLog(@"portrait");
...
} else {
NSLog(@"landscape");
...
}
当我的iPhone在我手中时,一切都很好。 但当我把它放在桌面上并运行应用程序时,内容以纵向模式显示在屏幕上,我的代码转到其他地方, NSLog打印横向。 / p>
我的考试不完整吗?如何防止这种情况?
编辑:测试在我的控制器viewDidLoad方法中执行,我的应用程序处理旋转。
答案 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
}