2012-05-16 45 views
0

我想知道用戶啓動我的應用時的設備方向,以便產生不同的視圖。我覺得奇怪的是如下:如何正確知道設備方向

- (void)viewDidLoad 
{ 
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) { 
     NSLog(@"1"); 
    } 
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) { 
     NSLog(@"2"); 
    } 
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) { 
     NSLog(@"3"); 
    } 
    if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortraitUpsideDown) { 
     NSLog(@"4"); 
    } 
} 

沒有人打印!我在ipad模擬器上做過,我認爲方向應該是UIDeviceOrientationPortrait。爲什麼會發生?以及如何正確地知道方向?

+0

http://stackoverflow.com/questions/5888016/ios-device-orientation-on-load –

+0

http://stackoverflow.com/questions/634745/iphone-orientation –

回答

0

它可能是這樣的情況,模擬器根本不能在一個方向的狀態(這是沒有道理的,因爲你不能真正旋轉你的電腦......)你檢查它是否返回UIDeviceOrientationUnknown

1

嘗試使用

[UIApplication sharedApplication].statusBarOrientation 

,而不是

[UIDevice currentDevice].orientation 
0

的文檔或的UIDevice指出:

您使用方向屬性來獲取當前的方向或 由收到變更通知註冊爲 UIDeviceOrientationDidChangeNoti通知。使用 無論這些技術來獲得定位數據之前,你必須使用beginGeneratingDeviceOrientationNotifications 方法

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

所以它可能是你獲得未知的方向,因爲你永遠不啓動定向通知使 數據傳輸代。

您還應該在viewDidLoad中記錄該值以確認您在獲取方向時所收到的內容。這將是進一步調查的一個很好的起點。

0
Use this :- 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {  
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)  
{  
//code for portrait 

}    
else  
{   //code for Landscape 

    }  
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortrait ||interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
} 
  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation是委託方法OA的UIViewController。
0

根據the docs,的的orientation屬性將始終返回0(即,UIDeviceOrientationUnknown)除非-beginGeneratingDeviceOrientationNotifications已經首先被調用。此方法將啓用加速度計,傳遞通知更改並更新單身人士的orientation屬性。