4

UITabBarController で実際に問題が発生しています。私が求めている結果は次のとおりです: 1) ポートレート モードでは、単純なタブ バー ベースのアプリケーション (ナビゲーション バーを含む) はあまり派手ではありません。2) ランドスケープ モードでは、UITabBar を完全に無視して独自の UIViewController を使用したいと考えています。

私が最後に試したアプローチ(私は多くの変種を試しました)は、なぜ「機能していない」のか理解できませんでした:

  • 「すべて」を管理すると思われるカスタムUIViewController(これをAAと呼ぶ)があります。
  • このコントローラーは、アプリケーションの開始時にウィンドウに追加され、その loadView で、UITabBarController (この TBC を呼び出す) と UILandscapeController (この LSC を呼び出す) の 2 つのコントローラーが作成されます。次に、AA のビューのサブビューとして tabbarcontroller ビューを追加します。
  • 今AAクラスで、私はdidRotate blahまたはwillRotate blahをオーバーライドし、基本的に2つのビューを切り替えたいと思っています.
  • [TBC.view removeFromSuperView];
    [AA.view addSubview:LSC.view];
    

    縦向きに戻るときは逆にします。

    [LSC.view removeFromSuperView];
    [AA.view addSubview:TBC.view];
    

    私が抱えている問題の量 (まあ、単純に間違って回転し、実際に混乱したインターフェイスを作成するだけです) は、まったく説明のつかないものです。tabbarcontroller ビューは、標準のビュー階層にあることをまったく「好き」ではなく、画面に直接接続したいようです。私の目標を達成するための最良のアプローチは何なのか、なぜタブバーがビューのサブビューになりたくないのか、

    どんなヒントでも大歓迎です。

    -t

    4

    3 に答える 3

    3

    まだ答えが必要な場合、または他の誰かがこれに出くわした場合に備えて、私は同じことを行って機能させましたが、ジャンプする必要があるいくつかのフープがあります. UITabBarController のビューを回転するには、次の 4 つのことを行う必要があります。

    1. ビューに切り替える前にステータス バーを削除する
    2. ビューを新しいフレームに回転します
    3. ステータス バーをビューに戻す
    4. ビューに切り替えます。

    これを行う RootRotationController は次のようになります。

    @implementation RootRotationController
    
    #define degreesToRadian(x) (M_PI * (x) / 180.0)
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        if ((UIInterfaceOrientationPortrait == interfaceOrientation) || (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation)) {
            [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
        }
        // Return YES for supported orientations
        return YES;
    }
    
    - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
        [super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration];
        if (UIInterfaceOrientationLandscapeLeft == interfaceOrientation) {
            self.view = self.landscape.view;
            self.view.transform = CGAffineTransformIdentity;
            self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
            self.view.bounds = CGRectMake(0, 0, 480, 300);
        } else if (UIInterfaceOrientationLandscapeRight == interfaceOrientation) {
            self.view = self.landscape.view;
            self.view.transform = CGAffineTransformIdentity;
            self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
            self.view.bounds = CGRectMake(0, 0, 480, 300);
        } else if (UIInterfaceOrientationPortrait == interfaceOrientation) {
            mainInterface.view.transform = CGAffineTransformIdentity;
            mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0));
            mainInterface.view.bounds = CGRectMake(0, 0, 300, 480);
            [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
            self.view = mainInterface.view;
        } else if (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation) {
            mainInterface.view.transform = CGAffineTransformIdentity;
            mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
            mainInterface.view.bounds = CGRectMake(0, 0, 300,480);
            [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
            self.view = mainInterface.view;
        }
    }
    

    さらに、ウィンドウにルート コントローラのビューを追加した直後に shouldAutorotateToInterfaceOrientation が呼び出されることを知っておく必要があります。そのため、アプリケーション デリゲートでステータス バーを有効にした直後にステータス バーを再度有効にする必要があります。

    于 2009-10-28T09:17:47.843 に答える
    1

    ドキュメントのUIViewControllerインスタンスメソッドを確認してください。rotatingFooterView

    または、を使用せずに、自分でTabBarを管理することもできますUITabBarController

    于 2009-02-14T13:17:28.437 に答える
    1

    あなたの問題はタイプミスから来ていると思います。removeFromSuperView を removeFromSuperview に変更します。しかし、それにはまだ問題があります。タブバーが正しく回転しません。消えるまで上昇します。

    タブバーを削除せずに、透明にするのはどうですか。

    于 2009-03-17T11:47:24.623 に答える