2011-03-23 59 views
2

我正在嘗試使我的應用程序在橫向和縱向中工作。我在我的所有視圖控制器中都安裝了正確的方法,並且在iPad模擬器旋轉時觸發此代碼,但始終觸發縱向顯示。景觀IF子句永遠不會被觸發。我可能做錯了什麼?當視圖旋轉時,UIInterfaceOrientationIsLandscape不會觸發

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation { 
NSLog(@"******* ROTATING ******"); 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) { 

     NSLog(@"ROTATING View Landscape ******"); 

    } else if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 

     NSLog(@"ROTATING View Portrait ******"); 

    } 
} 

}

回答

4

我發現,檢測的iPhone/iPad上的當前設備方向的最可靠的方法是使用statusBarOrientation屬性,像這樣:

UIInterfaceOrientation currentOrientation = 
    [UIApplication sharedApplication].statusBarOrientation; 

如果你用那個代替self.interfaceOrientation,你的代碼是否工作?

+0

感謝您的提示。我添加了代碼,當我運行它時,我看到了相同的結果。即使使用這種方法,即使我正盯着模擬器並且設備位於其側面,當前方向也會將方向返回爲縱向。通過完整的360度旋轉,該值總是以肖像形式返回。 – Nungster 2011-03-24 00:48:48

+0

我還發現,我的信息plist文件已更新爲iPhone,並找到支持iPad的方向數組並更新它們。重新加載項目,它仍然只能看到肖像的方向。我在我的ipad上建立了我的項目並旋轉了它,並觀看所有的方向作爲肖像觸發。 – Nungster 2011-03-24 01:37:11

5

設備和接口方向似乎是不同的東西。我在Apple的網站上找到了使用UIDeviceOrientation執行此操作的方法。當我旋轉模擬器和我的ipad設備時,使用這個測試我得到正確的觸發器。

UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 

if (UIDeviceOrientationIsLandscape(deviceOrientation)) 

{ 


} 

else if (deviceOrientation == UIDeviceOrientationPortrait) 

{ 

}  
+0

不錯的一個,這對我的iPhone 4工作 – roboto1986 2015-11-17 05:44:31

-1

用途:

+(bool)isLandscape 
{ 
    return 
     !UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation) || 
     !UIInterfaceOrientationIsPortrait([UIDevice currentDevice].orientation); 
} 
+1

這個答案和@ Nungster在模擬器中的工作,但如果iPad是平坦的桌子上,設備的方向是UIDeviceOrientationFaceUp或UIDeviceOrientationFaceDown。這可能會導致錯誤,但可能會失敗。使用statusBarOrientation(@ aroth的答案)來獲取UI的當前狀態。 – Suz 2014-12-03 20:34:27

0

這是我在SWIFT代碼爲我:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 

    let deviceOrientation:UIDeviceOrientation = UIDevice.currentDevice().orientation 

    if (UIDeviceOrientationIsPortrait(deviceOrientation)){ 
     let value = UIInterfaceOrientation.LandscapeLeft.rawValue 
     UIDevice.currentDevice().setValue(value, forKey: "orientation") 
    } 
} 

viewWillTransitionToSize:withTransitionCoordinator:上面的方法來找出你是否旋轉爲縱向或橫向。

我的代碼基本上會在檢測到肖像模式時將方向更改回風景模式。