如何让iPhone面向当前?

时间:2010-03-25 19:25:33

标签: objective-c accelerometer

是否有特殊的方法来获取iPhone定位?我不需要它在度或弧度,我希望它返回UIInterfaceOrientation对象。我只需要像

这样的if-else结构
if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) {
//Code
}  
if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft ) {
//Code
}

提前致谢!

5 个答案:

答案 0 :(得分:114)

这很可能是你想要的:

UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];

然后您可以使用系统宏,如:

if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
{

}

如果您想使用设备方向:

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];

这包括UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown

等枚举

答案 1 :(得分:11)

如其他答案所述,您需要interfaceOrientation,而不是deviceOrientation。

最简单的方法是在UIViewController上使用属性interfaceOrientation。 (所以大多数情况下,只是:self.interfaceOrientation会这样做。)

可能的值是:

UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft

记住: 通过将设备向右转动进入左方向。

答案 2 :(得分:4)

以下是我要编写的一段代码,因为当方向发生变化时,我回到我的根视图中时遇到了奇怪的问题....我看到只是调用应该被调用的方法但看起来似乎是...这很好没有错误

- (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");
    }
}

答案 3 :(得分:1)

UIInterfaceOrientation现已弃用,UIDeviceOrientation包含UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown,因此无法依赖于界面方向。

虽然解决方案非常简单

if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) {
    // Landscape
} else {
    // Portrait
}

答案 4 :(得分:0)

不建议使用[UIApplication statusBarOrientation],现在应该使用:

UIWindowScene *activeWindow = (UIWindowScene *)[[[UIApplication sharedApplication] windows] firstObject];

UIInterfaceOrientation orientation = [activeWindow interfaceOrientation] ?: UIInterfaceOrientationPortrait;