[英]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.