0

このコードを使用して、ホーム画面 (アプリケーションの最初の画面) を強制的に縦向きにし、他の画面はすべての向きをサポートしたままにします。

    public class RltNavigationController : UINavigationController
{
    public RltNavigationController () : base ()
    {
    }

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations ()
    {
        if(this.TopViewController is HomeScreen )
            return UIInterfaceOrientationMask.Portrait ;
        else 
            return UIInterfaceOrientationMask.AllButUpsideDown  ;

    }

    public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
    {
        // Return true for supported orientations
        if(this.TopViewController is HomeScreen )
            return (toInterfaceOrientation == UIInterfaceOrientation.Portrait );
        else 
            return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown) ;

    }


}

ここで、デバイスがホーム画面で横向きになっているとします (デバイスは横向きですが、画面は縦向きです)。ユーザーが他のビューに移動すると、他のビューは縦向きに表示され、横向きに表示されるようになりました。実際の回転で2番目のビューをロードするために選択できるソリューションは何ですか?

編集

すべての回答に感謝します。すでに問題は、画面を強制的に縦にできないということではないことに注意してください。問題を理解するには、次のシナリオに従ってください。

-> 最初の画面を強制的に縦にします。

->デバイスは横向きで、私はホーム画面にいます(ホーム画面は縦向きに表示されます)

-> すべての向きをサポートする別の画面に切り替えます

-> 親画面が縦向きだったため、別の画面では縦向きに表示されます (デバイスが横向きであるため、横向きに表示する必要があります)。

4

3 に答える 3

0

また、XIB から特定の viewController を直接選択して、Landscape または Portrait にして同じロードを行うこともできます。

于 2013-10-26T16:56:03.167 に答える
0

明示的に言うことはできません、viewController が横向きで、ビューが横向きになります。それが機能する方法は、コントローラーであるコントローラーに画面を要求することです。これは、ナビゲーションコントローラー、タブビューコントローラー、モーダル、回転できるようにする方法などです。ナビゲーション コントローラーがある場合、すべての viewController にはナビゲーション コントローラーの回転のみが含まれます。

ナビゲーション コントローラーのサブクラス化や、[self.visibleViewController shouldAutoRotate]; を呼び出すべき自動回転メソッドのサブクラス化など、いくつかのトリックがありました。これは、画面を回転させたり回転させたりするために機能しますが、すべての向きをサポートする画面が 1 つしかなく、他のすべての画面がサポートされていない場合は、プッシュ/ポップ エラーが発生し、その異なる向きで次の viewController をプッシュまたはポップすると、その向きになります。

rootViewController に明示的に回転するように直接指示することはできないため、次善の策は次のとおりです。

  • A: QuartzCore を使用して手動でビューを回転させます。
  • B: 向きごとに個別の xib ファイルを用意して、横向きに回転すると横向きの viewController が表示され、その逆も同様です。
于 2013-10-26T19:40:55.530 に答える
0

これを行う最も簡単な方法は、現在表示されているビュー コントローラーに基づいて回転を継承するカスタム ナビゲーション コントローラー (UINavigationController のサブクラス) を作成することです。

カスタム ナビゲーション コントローラーの内部:

-(NSUInteger) supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

-(BOOL) shouldAutorotate {
    return self.topViewController.shouldAutorotate;
}

次に、その中のいずれかのビュー コントローラー内に、次のメソッドを追加します。

-(BOOL)shouldAutorotate{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationPortrait;
}

これは、自動回転したくないビュー用です。回転させたいビューに応じて変更します。

プロジェクト設定で有効にしたい向きの回転があることを確認し、複数の可能な回転を含むビュー階層には、通常のナビゲーション コントローラーではなくカスタム ナビゲーション コントローラーを使用してください。

回転したビューがポップされ、前のビューが回転できない場合、問題が発生する可能性があることに注意してください。頭のてっぺんから、これが適切に機能するかどうかはわかりません。

于 2013-10-26T19:52:48.153 に答える