如何获得iPhone目前的方向?
有没有一种特殊的方法来获取iPhone的方向? 我不需要度数或弧度,我希望它返回一个UIInterfaceOrientation对象。 我只是需要一个if-else的结构
if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) { //Code } if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft ) { //Code }
提前致谢!
这很可能是你想要的:
UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
然后你可以使用系统macros,如:
if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) { }
如果您想要设备方向使用:
UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
这包括像UIDeviceOrientationFaceUp
和UIDeviceOrientationFaceDown
正如其他答案中所讨论的,您需要interfaceOrientation,而不是deviceOrientation。
最简单的方法是在UIViewController上使用属性interfaceOrientation。 (所以大多数情况下,只是:self.interfaceOrientation会做)。
可能的值是:
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
记住:通过将您的设备转向右侧来input向左方向。
这里是我写的代码片段,因为当方向被改变时,我得到了更奇怪的问题回到我的根视图….我看到只是调出应该被调用的方法,但看起来似乎是。这个工程很好,没有错误
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeLeft){ //do something or rather [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; NSLog(@"landscape left"); } if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeRight){ //do something or rather [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; NSLog(@"landscape right"); } if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationPortrait){ //do something or rather [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]; NSLog(@"portrait"); } }
UIInterfaceOrientation
现在已经被弃用了, UIDeviceOrientation
包括了UIDeviceOrientationFaceUp
和UIDeviceOrientationFaceDown
所以不能依靠给你的界面方向。
解决scheme非常简单
if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) { // Landscape } else { // Portrait }