2014-02-27 134 views
0

我已經創建了一個ipad應用程序,其中主屏幕只能在肖像模式下顯示。所以我在viewdidload中使用了下面的代碼。以編程方式在viewdidload中設置方向不起作用

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]; 

但它不工作。我在xcode 5上使用ios 7.如果我從橫向模式打開我的應用程序,它會自動轉到縱向模式。但我得到這樣的:

enter image description here

,但它應該是這樣的:

enter image description here

任何一個可以幫我解決這個問題。 在此先感謝。

+0

的上面的方法被刪除,現在不能使用。 –

回答

0
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait]; 

UIInterfaceOrientation orientation = (UIInterfaceOrientation)[[UIDevice currentDevice] orientation]; 

if(orientation == UIInterfaceOrientationPortrait) 
{ 
    isLandscapeMode = NO; 
    inLandscapeRight = NO; 
    inLandscapeLeft = NO; 
} 
else if(orientation == UIInterfaceOrientationLandscapeRight) 
{ 
    isLandscapeMode = YES; 
    inLandscapeRight = YES; 
    inLandscapeLeft = NO; 

} else if(orientation == UIInterfaceOrientationLandscapeLeft) 
{ 
    isLandscapeMode = YES; 
    inLandscapeRight = NO; 
    inLandscapeLeft = YES; 
} 

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    { 
     isLandscapeMode = YES; 
     inLandscapeLeft = YES; 
     inLandscapeRight = NO; 
     frameForProfile = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); 
    } 
    else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     isLandscapeMode = YES; 
     inLandscapeLeft = NO; 
     inLandscapeRight = YES; 
     frameForProfile = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); 
    } 
    else 
    { 
     isLandscapeMode = NO; 
     inLandscapeLeft = NO; 
     inLandscapeRight = NO; 
    } 

} 

集BOOL此方法已被棄用。你不能再使用這種方法。

https://stackoverflow.com/a/12813644/1405008

上面的鏈接提供了有關如何爲UIViewController提供肖像唯一模式的細節。

如果你推入NavigationViewController然後試試這個。

https://stackoverflow.com/a/16152506/1405008

+0

我檢查了鏈接,它將整個應用限制爲肖像模式。但我只需要將我的主屏幕限制爲肖像模式。其他屏幕應該可以在兩種模式下工作。 – gunas

+0

http://stackoverflow.com/a/12813644/1405008檢查此鏈接 – CoolMonster

0

複製該代碼在您的viewDidLoad中根據您的要求

0

從你的截圖,我可以看到自己的應用標籤基地。幾天前我面臨同樣的問題。我解決了它。我問了一個和你的問題幾乎相同的問題。然後在幾個小時的閱讀後,我解決了這個問題。有鏈接到我的question and answer

2

下面的代碼是即將從肖像變換navigationController以景觀編程:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.3]; 
self.navigationController.view.transform = CGAffineTransformIdentity; 
self.navigationController.view.transform = CGAffineTransformMakeRotation(M_PI*(90)/180.0); 
self.navigationController.view.bounds = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width); 
[UIView commitAnimations]; 

self.view.frame = self.view.frame; //This is necessary 
self.wantsFullScreenLayout = YES; 
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; 

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscapeRight; 
} 

只是希望給你提供一些其他的想法。

0

有很多關於這樣類似的問題和答案,但不知何故,他們沒有工作對我來說,因爲我需要讓僅適用於iPhone肖像模式,只有橫向模式在iPad上,所以分享我的解決方案:

  1. 刪除,因爲它們可能互相

  2. 在項目設置發生衝突與設備方向(shouldAutoRotate, supportedInterfaceOrientations, preferredInterfaceOrientations等),所有的方法使所有4種模式:人像,倒掛,土地風景正確

  3. 選擇識別設備類型(iPhone或iPad)的方法。我使用的是UIScreen.mainScreen().bounds.height which並不理想,但適合我的需要

  4. 將在AppDelegate中以下

    func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask { 
    
        if UIScreen.mainScreen().bounds.height < 760 { //iPhone 
         UIApplication.sharedApplication().setStatusBarOrientation(.Portrait, animated: false); 
         return UIInterfaceOrientationMask.Portrait; 
        } else { 
         UIApplication.sharedApplication().setStatusBarOrientation(.LandscapeLeft, animated: false); 
         return UIInterfaceOrientationMask.Landscape; 
        } 
    } 
    

測試上的Xcode 7.1.1所有的iPhone和iPad模擬器運行iOS9.1

相關問題