3

iOS 5.Xで正しく動作し、すべての向きをサポートする配送アプリでは、iOS 6に対して構築されており、iPad /シミュレーターが横向きの場合でも常に縦向きで起動します)。

新しい回転メソッドを追加しました

- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);

しかし、それは違いはありません。

ルートビューコントローラーとしてナビゲーションコントローラーを使用しないことに注意してください。それ以外の場合、アプリは最初の問題の後に正しく回転します。

ルートビューコントローラーは、回転に関するすべての意思決定を処理し、メインウィンドウに次のように追加されます。

    self.window.rootViewController = viewController;

plistキーセットUISupportedInterfaceOrientations〜ipadにすべての回転があります

最初の回転が無視される理由はありますか?

5.1では、shouldAutorotateToInterfaceOrientationやwillRotateToInterfaceOrientationなどを正しく呼び出しますが、6.0では呼び出しません。5.1 SDKに対してビルドすれば、すべてうまくいきます。

4

2 に答える 2

2

Appleと話し合った後、彼らはそれが既存のプロジェクトのXcode4.5のバグであると主張している。新しいプロジェクトを作成してすべてを再追加することもできます(私たちのような大きなプロジェクトでは困難です)。または、次のような回転ロジックを追加します。

- (void)viewWillLayoutSubviews
{
    if ( ! afterFirstTime )
    {
        [self handleRotationFor:self.interfaceOrientation];
        afterFirstTime = YES;
    }
}

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self handleRotationFor:toInterfaceOrientation];
}

ルートビューコントローラで。感謝祭の休憩の直前にこの回答を得たので、少し大雑把かもしれませんが、このコードは機能します。

于 2012-11-21T14:40:43.440 に答える
1

MusiGenesisが言ったように、アプリケーションがポートレートビューをサポートしている場合。「iOS5でも、iPadアプリは常に縦向きで起動します(デバイスが横向きの場合でも)。」

しかし、私はデバイスの向きから始めるための解決策を見つけました。以下のようにviewDidLoad関数の後に、ルートViewControllerで初期回転を設定できます。

コードは無意味に見えますが、機能します。

縦向きの回転を処理する必要はありません。

-(void)viewDidLoad {

[super viewDidLoad];
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) {
    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationLandscapeLeft];

}
else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) {
    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationLandscapeRight];

}

}

よろしく。

于 2012-11-07T12:26:37.557 に答える