2011-12-07 68 views
3

所以我有一個應用程序需要加載不同的圖像作爲背景圖像取決於設備的方向。我在viewDidLoad中有以下代碼:方向錯誤地報告在viewDidLoad

BOOL isLandScape = UIDeviceOrientationIsLandscape(self.interfaceOrientation); 

if (isLandScape) 
{ 
    self.bgImage.image = [UIImage imageNamed:@"login_bg748.png"];   
} 

由於某些原因,即使模擬器在橫向啓動,這個布爾值仍然是錯誤的。我檢查過,無論實際的模擬器方向如何,它總是報告爲縱向模式。有沒有人有一個想法,爲什麼這不起作用?

在shouldAutoRotateForInterfaceOrientation我有以下幾點:

if (UIDeviceOrientationIsLandscape(interfaceOrientation)) 
    { 
     self.bgImage.image = [UIImage imageNamed:@"login_bg748.png"]; 
    } else 
    { 
     self.bgImage.image = [UIImage imageNamed:@"login_bg1004.png"];   
    } 

    return YES; 

而且這個代碼的工作,它只是被搞砸啓動。我執行一次旋轉後,它工作正常。

回答

7

原因是viewDidLoad爲時尚早。每個應用程序都以縱向啓動,然後旋轉至橫向。當調用viewDidLoad時,旋轉還沒有發生。您想要使用延遲的演奏,或將您的測試放在didRotateFromInterfaceOrientation或類似的地方。請參閱我的書的解釋:

http://www.apeth.com/iOSBook/ch19.html#_rotation

+0

我用didRotateFromInterfaceOrientation它工作。謝啦! – FreaknBigPanda

2

首先在功能shouldAutoRotateForInterfaceOrientation,你只需要return YES

現在使用此功能

 -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
    { 

      if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) 
       { 
         //landscape view login 
       } 
      else 
       { 
         //portrait View logic 
       } 
    } 

如果您已經在橫向視圖或然後在你的肖像視圖viewDidLoad功能

 -(void)viewDidLoad 
     { 
      if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) 
     { 
       //landscape view code 
      } 

     else 
     { 
       //portrait view code 
     } 

     } 

希望這會有所幫助

+0

如果每個應用都以縱向模式啓動,那麼爲什麼要在viewDidLoad中檢查它呢? –

+0

我懷疑每個應用都以縱向模式啓動。這取決於要求。例如,在iPhone6 +,iPhone 7 +上,您可以在橫向模式下使用手機,因此如果用戶以橫向模式啓動應用程序,則「viewdidload」中的代碼將負責向用戶顯示適當的視圖,並且如果他更改到使用應用程序時的肖像模式,我們有'didRotateFromInterfaceOrientation'來照顧它 –