如何通过UIView参考获取设备方向?

时间:2012-04-26 12:26:26

标签: ios uiview uiinterfaceorientation

我需要从ViewController获取设备方向。 我无法依据

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

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

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

4 个答案:

答案 0 :(得分:13)

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

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

答案 1 :(得分:4)

UIViewController有一个属性

UIInterfaceOrientation interfaceOrientation;

因此,在您的UIViewController中,您可以随时通过

访问设备的当前方向
UIInterfaceOrientation myCurrentOrientation = self.interfaceOrientation;

答案 2 :(得分:0)

Swift版

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


    if currentOrientation.isPortrait {

        print("PORTRAIT")

    } else if currentOrientation.isLandscape {

        print("LANDSCAPE")

    }

答案 3 :(得分:-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;
}