2013-01-22 86 views
2

我知道有很多關於如何強制IOS6中的方向的線程,但它們都不適用於我,所以現在我需要一些幫助來解決這個問題。IOS6中的強制橫向視圖

我有一個導航的應用程序,有許多視圖控制器。它們都是縱向視圖,不需要在橫向模式下加載(無需用戶先打開電話)。

在執行我的導航控制器時,我添加了shouldAutorotate,supportedInterfaceOrientations和preferredInterfaceOriantationForPresentation。

@implementation UINavigationController (Rotation_IOS6) 

- (BOOL)shouldAutorotate 
{ 
    return [self.topViewController shouldAutorotate]; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return [self.topViewController supportedInterfaceOrientations]; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return [self.topViewController preferredInterfaceOrientationForPresentation]; 
} 

@end 

所以它返回已然後在每個視圖控制器定義的值。

在應用程序委託中,我有supportedInterfaceOrientationsForWindow。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 

//Default orientations value 
NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown; 

//Get orientation from the last view controller 
if(self.window.rootViewController){ 
    UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject]; 
    orientations = [presentedViewController supportedInterfaceOrientations]; 
} 

return orientations; 
} 

在每個視圖控制器,然後我有我爲視圖設置,例如:

// Only allow portrait view 
-(NSInteger)supportedInterfaceOrientations{  
    return UIInterfaceOrientationMaskPortrait; 
} 

- (BOOL)shouldAutorotate { 
    return YES; 
} 

我推下一個視圖控制器是這樣的:

NextViewController *nxtController = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil]; 
[self.navigationController pushViewController:nxtController animated:YES]; 

但是,當我按住橫向視圖控制器,同時以縱向方向握住手機,同時也以縱向模式加載。如果我然後傾斜手機,它會觸發自動旋轉功能並將視圖旋轉到橫向模式,然後鎖定在該模式下。不過,我需要將其鎖定在橫向模式下,而不使用手機方向來觸發其檢查自動旋轉。 任何想法?

+0

看看[這個答案](http://stackoverflow.com/a/16135071/1262527),也許它可以幫助你。 –

回答

1

你可以嘗試使用總是返回景觀,如shouldaAutorotateToInterfaceOrientation逼的viewController橫向顯示:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 
} 
+0

是的,它適用於iOS 5,但不適用於iOS 6 .. – PonySlays

1

去項目設置和刪除你不想要的模式選擇。