6

我需要从 ViewController 获取设备方向。我不能基于

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

因为它有时会返回未知方向(例如,当设备放在桌子上时)。

我只需要知道当前 UIView 显示的方向是什么(是横向左侧还是横向右侧)。当方向改变时,我不需要更新这个值,我只想知道它,当我要求它时。只是一些参考view.orientation ;)。有什么可以帮助我的吗?我已经阅读了 UIView 文档,找到了一些对 UIWindow 的参考,但没有什么可以帮助我。

4

4 回答 4

13

您还可以从 UIApplication 获取设备方向,您是否尝试过使用

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
于 2012-04-26T12:31:29.477 回答
5

UIViewController 有一个属性

UIInterfaceOrientation interfaceOrientation;

因此,在您的 UIViewController 中,您可以随时通过以下方式访问设备的当前方向

UIInterfaceOrientation myCurrentOrientation = self.interfaceOrientation;
于 2013-03-05T17:49:38.700 回答
0

斯威夫特版本

    let currentOrientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation


    if currentOrientation.isPortrait {

        print("PORTRAIT")

    } else if currentOrientation.isLandscape {

        print("LANDSCAPE")

    }
于 2016-06-01T01:14:04.603 回答
-1

以下是执行相同操作的示例代码。有一个名为deviceOrientation的变量,它会在被询问时回答设备的当前方向。

UIDeviceOrientation deviceOrientation;

- (void)viewWillAppear:(BOOL)animated
{
    deviceOrientation = (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation];
    [self willAnimateRotationToInterfaceOrientation:deviceOrientation duration:0.5];
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    deviceOrientation = (UIDeviceOrientation)interfaceOrientation;
    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        NSLog(@"Landscape");
    }
    else
    {
        NSLog(@"Portrait");
    }
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return TRUE;
}
于 2012-04-26T12:32:46.787 回答