2

iOS アプリケーションに問題があるようです。

展開対象は iOS5.0 ですが、iOS 6.0 SDK を使用しています。

私のView Controllerには次のものがあります:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

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

これは、iOS5 シミュレーターで実行すると問題なく動作します。ビューは、LandScape または上下逆に回転しません。

ただし、IOS6 シミュレータ (およびデバイス) では、回転し続けます。

私はそれが呼び出され、2回呼び出されるNSLogことを確認して-supportedInterfaceOrientationsいましたが、それでもLandScape(右または左)に回転します

私は何を間違っていますか?

UINavigationControllerこれを含めるために (My Root View Controller)も拡張しました。

@implementation UINavigationController (Rotation_IOS6)

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

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

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

@end

しかし、まだ成功していません。

編集

マットの答えによると。また、UINavigationController と同様の実装で UITabBarController を拡張する必要があり、それが機能しました。

4

3 に答える 3

4

問題は、ナビゲーション インターフェイスを使用している可能性があります。あなたは?その場合は、UINavigationController をサブクラス化し、そのサブクラスのインスタンスをナビゲーション コントローラーとして使用する必要があります。そのサブクラスで、そこに を実装しsupportedInterfaceOrientationsます。親View Controller(UITabBarControllerなど)についても同様です。

その理由は、回転に関する iOS 6 の考え方がiOS 5 とはまったく異なるからです。iOS 6 では、アプリケーション自体のレベルから開始し、ルート ビュー コントローラーまたはその他のフル スクリーン ビュー コントローラー (提示されたビュー コントローラーなど) へのアプリ デリゲートを経由して下に進み、停止します。親はもはや子供に相談しません。

さらに、アプリケーション自体 (info.plist または app デリゲートを介して) は、アプリケーションの任意の部分が想定できるすべての向きをリストする必要があります。ビューコントローラーは、それらのサブセットのみを要求できます。

リリース ノートを参照してください。

http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html

ただし、この文は嘘であることに注意してください。

互換性のために、まだ shouldAutorotateToInterfaceOrientation: メソッドを実装しているビュー コントローラーは、新しい自動回転動作を取得しません。

反対に、iOS 6 では古い自動回転メソッドは完全に無視されます。誰もが新しいオートローテーション動作を取得します。「オプトイン」ではありません。

于 2012-12-07T02:12:38.650 に答える
0

アプリを回転させたくない場合は、info.plist でサポートされているインターフェイスの向きから横向きを削除することができます。

それ以外の場合は、ルート ビュー コントローラーに方向情報を子に求めるように指示する必要があります。

于 2012-12-07T02:03:01.330 に答える
0

プロジェクトの設定と info.plist を確認してください。アプリのデリゲートよりも優先度が高くなっています。必要な方向のみが選択されていることを確認してください

于 2013-01-09T08:07:24.993 に答える