簡體   English   中英

如何通過UIView參考獲取設備方向?

[英]How to get device orientation via UIView reference?

我需要從ViewController獲取設備方向。 我不能依據

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

因為它有時會返回未知的方向(例如當設備放在桌子上時)。

我只需知道我當前的UIView顯示的方向 (左側是橫向還是橫向右側)。 當方向改變時,我不需要更新此值,我只想知道它,當我要求它時。 只是一些參考view.orientation ;)。 有什么東西可以幫助我嗎? 我已經閱讀了UIView文檔,發現了一些對UIWindow的引用,但沒有什么可以幫助我。

如果您嘗試使用,還可以從UIApplication獲取設備方向

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];

UIViewController有一個屬性

UIInterfaceOrientation interfaceOrientation;

因此,在您的UIViewController中,您可以隨時訪問設備的當前方向

UIInterfaceOrientation myCurrentOrientation = self.interfaceOrientation;

Swift版本

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


    if currentOrientation.isPortrait {

        print("PORTRAIT")

    } else if currentOrientation.isLandscape {

        print("LANDSCAPE")

    }

以下是執行相同操作的示例代碼。 有一個名為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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM