2

バージョンios5+をサポートするアプリストアにあるアプリがあります。このアプリをストアにデプロイしたとき、ベースSDKは5.0に設定され、デプロイターゲットはios5.0でした。現在、iOS5および6デバイスで正常に動作しています。

その後、IDEをios 6.0にアップグレードしました。ベースSDKは6.0で、展開ターゲットは5.0です。ただし、6.0シミュレーターまたはデバイスでこのアプリを実行すると、メッセージが減価償却されるため、自動回転の問題が発生します。

  1. 展開ターゲットが5.0の場合、これらの問題が発生するのはなぜですか?iOS6を使用したくありません。
  2. ベースSDKを5.0に設定できないのはなぜですか?

更新: これは私のコントローラーが現在どのように見えるかです。残念ながら、preferredInterfaceOrientationは、方向が変わるたびに呼び出されるのではなく、一度だけ呼び出されます。このメソッドでビューを操作するので、これは私には適していません。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    [self layoutHomeViewButtons:toInterfaceOrientation];

    return YES;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationLandscapeRight;
}

- (NSUInteger)supportedInterfaceOrientations
{

    [self layoutHomeViewButtons:[self getInterfaceOrientation]];

    return UIInterfaceOrientationMaskAll;
}

更新2: supportInterfaceOrientationsメソッドを取得する方法を理解しました。MainWindow.xibには、ウィンドウのルートビューコントローラーとして設定されたnavigationcontrollerがあります。このナビゲーションコントローラーのサブアイテムとして、上記のコードが存在するホームビューコントローラーがあります。

ウィンドウのrootviewcontrollerがhomeviewcontrollerになるようにこのリンクを変更すると、メソッドが呼び出されます。ただし、UIにはこのナビゲーションコントローラーが必要です。

4

4 に答える 4

4

あなたが説明していることは、iOS 6に切り替えたときに私が直面したこととよく似ています。それは、アプリデリゲートでself.windowが処理される方法に帰着しました。それがあなたの場合に当てはまる場合、基本的に、あなたはあなたのコードをから変更したいです

[self.window addSubview:navigationController.view];

[self.window setRootViewController:navigationController];

これを行うと、ローテーションメッセージが突然発火し始めました。これがこのテーマに関する私のブログ投稿です:

http://www.dosomethinghere.com/2012/09/24/the-app-delegates-uiwindow-is-finicky/

于 2012-10-12T14:54:38.260 に答える
0

新しいローテーションをサポートするには、次のメソッドを実装します。

// Tell the system which orientations are supporter
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL) shouldAutorotate {
    return NO;
} 

// tell the system which rotation should be used when the viewcontroller is presented.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationLandscapeRight;
}
于 2012-10-12T14:48:24.730 に答える
0

これらのios6メソッドが呼び出されなかった理由は、ウィンドウのrootviewcontrollerをhomeviewcontrollerではなくnavigationcontrollerに設定していたため、メソッドが呼び出されなかったためです。

これは私の解決策には役立たないので、私は答えを探していますが、これはこの質問を解決します。

ナビゲーションコントローラーをrootviewcontrollerとして使用する方法を理解しようとしているフォローアップの質問を参照してください:iOS 6のバグ:navコントローラーをウィンドウルートとして使用したときにsupportedInterfaceOrientationsが呼び出されない

于 2012-10-12T16:03:23.677 に答える
0

この質問はすでに回答されていることがわかります。とにかく、Xcode4.5を使用したときに同じ問題が発生しました。ただし、Xcode 4.4.xを使用してコードをビルドすると、shouldAutorotateメソッドがなくても自動回転は完全に機能します。したがって、Xcode4.4.xでビルドしてみてください。

于 2012-10-19T04:17:50.043 に答える