

Xcode6,Objective-cで縦画面と横画面をボタンで切り替えられるアプリを作っています。  
（縦画面と横画面ではデザインも機能も異なります。）  
縦画面時はホームボタン下（Portrait)で固定し、  
横画面時は回転に伴い、ホームボタン右（LandScapeRight)と  
ホームボタン左（LandScapeLeft)の回転を許可したいです。

デバイスの回転はshouldAutorotateで管理しています。

[code]

    @implementation UINavigationController (rotateControl)
    
    - (NSUInteger)supportedInterfaceOrientations
    {
        return [self.visibleViewController supportedInterfaceOrientations];
    }
    
    - (BOOL)shouldAutorotate
    {
        return YES;
    }
    
    @end
    
[/code]

縦画面時はPortraitで固定しています。

[code]

    - (NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskPortrait;
    }
    
[/code]

横画面時はLandscapeで固定しています。

[code]

    - (NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskLandscape;
    }
    
[/code]

横画面時はステータスバー（デバイス）の向きに伴い  
横画面の上下回転をさせたいので  
アプリケーションの環境設定のDevice Orientationに  
"Landscape Left"と"Landscape Right"にチェックをつけています。

![画像の説明をここに入力](https://i.stack.imgur.com/oVB23.png)

しかし、iPhone6Plus(iOS8)の実機で動かすと  
横画面時に、180度回転させると、  
ステータスバーの位置は常に上にくるように移動するのですが、  
それに伴いUIViewが回転せず、固定されたままになってしまいます。  
（iOS7のiPhone5実機、iPhone6およびiPhone6Plusのシミュレータでは期待動作です。）

ステータスバー（デバイス）の回転に伴い  
横画面の上下回転をさせるにはどうしたらよろしいでしょうか・・・  
ここ何日も詰まっていて困っています・・・  
よろしくお願いいたします。


CC BY-SA 3.0
2015-06-08T09:04:02.530
11116
2015-06-22T01:04:30.190
2015-06-09T06:09:28.427
10053
10053
question
objective-c xcode6 ios8
iOS8で横画面回転時に、デバイスの回転にともなってViewが回転せず、固定されてしまう


プログラムで操作する以前に、アプリケーションの環境設定で、180度回転を有効にしましょう。

![画像の説明をここに入力](https://i.stack.imgur.com/tqhDQ.png)

「Device Orientation」が、デフォルトでは **Upside Down** が無効になっているので、チェックを入れて、有効にしましょう。


CC BY-SA 3.0
2015-06-08T09:38:05.793
11118
2015-06-08T09:38:05.793
7362
11116
answer


どうやらiOS8のiPhone6PlusおよびiPad特有の事象のようです。

デバイスの回転はNSNotificationCenterクラスで検知し、  
デバイス回転時にViewにアフィン変換の回転アニメーションをつけることで  
デバイスの回転に伴いViewも回転させるようにしました。

[code]

    [UIView animateWithDuration:0.5f // アニメーション速度
                          delay:0.0f // 何秒後にアニメーションするか
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{
                           // ビューを180度回転
                           float angle = 180.0 * M_PI / 180;
                           CGAffineTransform t2 = CGAffineTransformRotate(t1, angle);
    
                     } completion:^(BOOL finished) {
                         // アニメーション終了時
                         NSLog(@"アニメーション終了");
                     }];
    
[/code]


CC BY-SA 3.0
2015-06-22T01:04:30.190
11590
2015-06-22T01:04:30.190
10075
11116
answer