2011-09-16 11 views
6

iPhoneアプリケーションを開発中です。このアプリケーションでは、UIViewController(vc1)は別のUIViewController(vc2)を表示します。 vc1はポートレートと風景の両方向をサポートします。 vc2は縦向きのみをサポートします。 shouldAutorotateToInterfaceOrientation:VC2が提示されている場合iOS5でUIViewControllerデバイスローテーションデリゲートメソッドが呼び出されない

  1. 、それはVC1を要求し、これがYES 2.In iOS5を(ベータ7)willRotateToInterfaceOrientation :, didRotateFromInterfaceOrientationを返します。このシーケンスのために呼び出さ取得されていません。しかし、これはiOS4で正常に動作します。これはiOS5のバグですか?

おかげで、よろしく、 ディーパ

+0

iOS 5はまだNDAの下にあります –

答えて

8

が、私はアップルにバグを報告していたし、私は以下の回答を得た:

「エンジニアリングは、以下の情報に基づいて、意図したとおり、この問題が動作することを決定しました。

プレゼンテーションの動作が正しい - 以前のバージョンとは異なる動作をした場合、それはバグでした。おそらく予期しない動作の変化はVC1のディスクミッションに関係していますが、レイテ。

ビューコントローラがそれ自身を支配するときの姿勢を判断する他の方法があります。いろいろな理由から、ローテーションコールバックに頼ることは問題であることが判明しました。一般に

、のViewController回転コールバックは2つの場合に起こる:ウィンドウ階層

  • 混合インターフェース配向プレゼンテーションのビューコントローラの

    1. デバイスの向きが変化します。 (ボトムコントローラはポートレートのみをサポートし、デバイスはランドスケープにあり、ランドスケープをサポートするビューコントローラが提示されています。)しかし、間違いなく間違いです。

    viewWillLayoutSubviewsを使用してみてください:iOSの5で」

  • +0

    この問題をどのように修正しましたか?私はiOS 8 beta 5でも同じ問題を抱えています。 –

    4

    をiOS5を上に私のアプリをテストするとき、私は同様の問題に直面していたサブビューのレイアウトをめちゃめちゃに取得するために使用メインビューコントローラに向きが変更された場合。モーダルビューコントローラがアクティブであったとき。

    私はメインコントローラに現在の方向フラ​​グを保存することでした。このフラグは、メインコントローラ

    1. willAnimateRotationTに2つの場所で更新され、何

      oInterfaceOrientation:

    2. viewWillLayoutSubviews(これが唯一のiOS5をオン)

    Iが格納された値と現在の方向を比較することによりサブビューを調整するすべてのロジックを書きます。それらが異なる場合 - 保存された方向を更新して、サブビューを更新します。

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    {  
        // Any orientation is OK 
        return YES; 
    } 
    
    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
    { 
        portrait = UIInterfaceOrientationIsPortrait(toInterfaceOrientation); 
    
        // Code to update subview layout goes here 
    } 
    
    -(void)viewWillLayoutSubviews 
    { 
        BOOL isPortraitNow = UIInterfaceOrientationIsPortrait(self.interfaceOrientation); 
    
        if(isPortraitNow != portrait) 
        {   
         DLog(@"Interfaceorientation mismatch!, correcting"); 
    
         portrait = isPortraitNow; 
    
         // Code to update subview layout goes here 
        } 
    } 
    
    関連する問題