0

次のビュー階層があります

  • UIScrollView (水平スクロール)
    • UIScrollView (縦スクロール)
      • UIViewController

実際、複数の Sub ScrollView を持つ Root ScrollView Controller があります。(ルート ScrollViewController は水平方向にのみスクロールし、サブは垂直方向にのみスクロールします)。各 Sub ScrollView には UIViewController があります。

私のルート ScrollView コントローラーは期待どおりに動作し、次のような回転メソッドを呼び出します。

- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self rotateScrollViewToInterfaceOrientation:toInterfaceOrientation];
}

- (void) rotateScrollViewToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {
    if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        // do some rotation logic
    }
}

Sub ScrollViews と UIViewControllers で同じメソッドを使用しましたが、回転時に呼び出されません。

誰にも理由がありますか?

4

2 に答える 2

2

shouldAutorotateToInterfaceOrientation メソッドは廃止され、iOS 6 以降は呼び出されません。

これらの次のメソッドを実装してみてください。

-(BOOL)shouldAutomaticallyForwardAppearanceMethods{   
     // This method is called to determine whether to 
     // automatically forward appearance-related containment
     //  callbacks to child view controllers.
    return YES;

}
-(BOOL)shouldAutomaticallyForwardRotationMethods{
    // This method is called to determine whether to
    // automatically forward rotation-related containment 
    // callbacks to child view controllers.
   return YES;
}

注 : これらのメソッドは、iOS 6 でサポートされたばかりです。

于 2012-11-23T13:37:09.557 に答える
1

iOS 6.0 リリース ノートから:

自動回転は iOS 6 で変更されています。iOS 6 では、UIViewController の shouldAutorotateToInterfaceOrientation: メソッドは非推奨です。その代わりに、 supportedInterfaceOrientationsForWindow: および shouldAutorotate メソッドを使用する必要があります。より多くの責任がアプリとアプリ デリゲートに移行しています。現在、iOS コンテナー (UINavigationController など) は、自動回転する必要があるかどうかを判断するために、子に相談しません。既定では、アプリとビュー コントローラーのサポートされるインターフェイスの向きは、iPad イディオムの場合は UIInterfaceOrientationMaskAll に設定され、iPhone イディオムの場合は UIInterfaceOrientationMaskAllButUpsideDown に設定されます。ビュー コントローラーでサポートされているインターフェイスの向きは、時間の経過とともに変化する可能性があります。アプリでサポートされているインターフェイスの向きでさえ、時間の経過とともに変化する可能性があります。システムは、デバイスが回転するたびに、またはビュー コントローラーがフルスクリーン モーダル プレゼンテーション スタイルで表示されるたびに、サポートされているインターフェイスの向きを最上位のフルスクリーン ビュー コントローラー (通常はルート ビュー コントローラー) に問い合わせます。さらに、サポートされている向きは、このビュー コントローラーが shouldAutorotate メソッドから YES を返した場合にのみ取得されます。システムは、View Controller のサポートされている向きとアプリのサポートされている向き (Info.plist ファイルまたはアプリのデリゲートの application:supportedInterfaceOrientationsForWindow: メソッドによって決定される) を交差させて、回転するかどうかを決定します。システムは、アプリの supportedInterfaceOrientationsForWindow によって返された値を交差させることによって、向きがサポートされているかどうかを判断します。最上位のフルスクリーン コントローラの supportedInterfaceOrientations メソッドによって返される値を持つメソッド。setStatusBarOrientation:animated: メソッドは完全に廃止されたわけではありません。これは、最上位のフルスクリーン ビュー コントローラーの supportedInterfaceOrientations メソッドが 0 を返す場合にのみ機能するようになりました。互換性のために、まだ shouldAutorotateToInterfaceOrientation: メソッドを実装しているビュー コントローラーは、新しい自動回転動作を取得しません。(つまり、アプリ、アプリ デリゲート、または Info.plist ファイルを使用して、サポートされている向きを決定する方法にフォールバックしません。)代わりに、shouldAutorotateToInterfaceOrientation:

于 2012-11-23T13:34:39.773 に答える