2012-06-19 57 views
2

我試圖改變單一UIViewController的方向編程。用戶應該在設置中選擇視圖是否爲人像。該值將被保存在NSUserDefaults,並在特定ViewController方向應該改變。所以如果肖像是在interfaceOrientation應該是在UIInterfaceorientationUpsideDown ......iPhone設置interfaceorientation編程

我用下面的方法,但它只會改變方向時,用戶將設備轉向風景/肖像......否則什麼都不會觸發。

- (BOOL)shouldAutoRotateToInterfactOrientation:(UIInterfaceOrientation)interfaceOrientation 

而且我tryied下一個(也有方法名「setOrientation」):

[[UIDevice currentDevice] orientation: UIDeviceOrientationPortraitUpsideDown]; 

但同樣,沒有任何反應,也只是出現錯誤,因爲Xcode的sayes有這個名字沒有方法。

但它應該是另一種方式來改變它編程... 第一種方法也只是一個方法,處理設備位置後的actionListener,但應該有一種方法來直接調用此actionListener ... 。 我只是看着UIApplication文件內,但沒有有用的方法....

回答

6

你應該使用這樣的代碼:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(rotationChanged:) 
              name:@"UIDeviceOrientationDidChangeNotification" 
              object:nil]; 

,然後根據定向改變你的看法:

-(void)rotationChanged:(NSNotification *)notification{ 
    NSInteger orientation = [[UIDevice currentDevice] orientation]; 
    UIWindow *_window = [[[UIApplication sharedApplication] delegate] window]; 
    switch (orientation) { 
     case 1: 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:0.4]; 

      [_window setTransform:CGAffineTransformMakeRotation (0)]; 
      [_window setFrame:CGRectMake(0, 0, 320, 480)]; 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES]; 

      [UIView commitAnimations]; 
      break; 
     case 2: 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:0.4]; 

      [_window setTransform:CGAffineTransformMakeRotation (M_PI)]; 
      [_window setFrame:CGRectMake(0, 0, 320, 480)]; 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:YES]; 

      [UIView commitAnimations]; 
      break; 
     case 3: 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:0.4]; 

      [_window setTransform:CGAffineTransformMakeRotation (M_PI/2)]; 
      [_window setFrame:CGRectMake(0, 0, 320, 480)]; 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES]; 

      [UIView commitAnimations]; 
      break; 
     case 4: 
      [UIView beginAnimations:nil context:nil]; 
      [UIView setAnimationDuration:0.4]; 

      [_window setTransform:CGAffineTransformMakeRotation (- M_PI/2)]; 
      [_window setFrame:CGRectMake(0, 0, 320, 480)]; 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES]; 

      [UIView commitAnimations]; 
      break; 
     default: 
      break; 
    } 
} 

希望它能幫助:P

+0

我剛剛選擇了2個案例,以便用戶可以選擇肖像是或否。但是,當我進入遊戲視圖控制器時,所有控制器的屏幕都會發生變化....此外,當設置爲橫向模式時,我的桌面視圖的第一行不能完美顯示,但當再次更改視圖時,一切正常。是否需要再次加載才能正常顯示? –

+0

我有類似的問題...我有一個純粹的肖像應用程序...除YouTube視頻播放時。 當它開始時,我旋轉視圖,但玩家控制有點錯位,我仍然無法解決它。 –

+0

嘿russoedu,我只是再次測試應用程序。當我使用示例的案例3以便屏幕變爲橫向模式時,狀態欄會在設備轉向任何位置並保持縱向時變回肖像。當使用案例1時,一切正常。問題究竟在哪裏?我是否必須在「shouldAutoRotateToInterface」或其他內容中插入某些內容? –

0
[[UIApplication sharedApplication] setStatusBarOrientation:yourDesiredOrientation]; 

然後,您將需要編輯shouldAutoRotate方法(下面的例子是縱向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
+0

它原來的狀態欄您選擇的方向和仿真器變成相同的位置。但是現在我讓「shouldAutoRotate ....」方法總是返回true,但沒有任何反應,視圖停留在「... Portrait」的位置。 –

+0

在你的「shouldAutoRotate」的方法,只有當它是在所需方向應該返回true。否則,它會立即轉回,這可能是你所看到的。 – Crake

2

使用該完美的作品上iOS7和早。

[[UIDevice currentDevice] setValue: 
      [NSNumber numberWithInteger: UIInterfaceOrientationPortrait] 
          forKey:@"orientation"]; 
0

從以前的答案:

[[UIDevice currentDevice] setValue: 
      [NSNumber numberWithInteger: UIInterfaceOrientationPortrait] 
          forKey:@"orientation"]; 

警告

我有沒有可能性發表評論這個答案,所以我會編輯。

此答案的作者嘗試將UIInterfaceOrientation類型的值設置爲變量UIDeviceOrientation。它們都是NSInteger枚舉,所以編譯器不會顯示警告/錯誤。但是它們有不同的含義,「設備」另外有「正面朝上」和「正面朝下」的取向。

相關問題