0

私は本当に悪い状況にあり、アプリを提出しなければなりませんが、1 つの問題を発見しました:

私のアプリは Nav ベースのアプリです。このアプリでは、1 つのコントローラーのみをランドスケープできるようにします。

--> ルートコントローラー --> WelcomeController --> LandscapeController

ランドスケープコントローラーでは、メインビュー内に2つのビューを設定しました。1つはユーザーにデバイスを回転させる必要があることを伝えるポートレートモードで、もう1つはランドスケープに設定されています(メインビューはポートレートモードです)

私は私のナビゲーションコントローラをサブクラス化MyNavControllerしました:私が設定した:

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

したがって、階層の最上位にあるコントローラーが、navController回転できるかどうかを決定します。

私のアプリデリゲートで私は設定しました:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return (UIInterfaceOrientationMaskAll);

}

だから私は自分のアプリで両方の向きを持つことができます。

ウェルカムコントローラーで私が設定した:

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskPortrait);
    //return (UIInterfaceOrientationPortrait);

}

- (BOOL)shouldAutorotate
{
    return YES;
}

つまり、Welcome Controller はポートレート モードでのみ使用できます。

ランドスケープコントローラーで私は設定しました:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft;

}


- (BOOL)shouldAutorotate
{
    return YES;
}

ランドスケープコントローラーが回転できるようにします。

以下を使用してランドスケープコントローラーを呼び出します。

 LandscapeController *aLandscapeController = [LandscapeController] allo] init.... 
 [self.navigationController pushViewController:aLandscapeController animated:YES]; 

それは機能しますが、信じられないかもしれませんが、ランドスケープコントローラーを押してデバイスを回すと、ウェルカムコントローラーがランドスケープになり、画面の半分しか占有しないため、ランドスケープにすることはできず、これは非常に悪いです私には想像できません。

それを避けるために私は何ができますか?

私はどんな助けも借ります、もし必要なら寄付をします。

どうもありがとうございました。

4

1 に答える 1

0

UINavigationController ドキュメントの 2 番目の文:「このクラスはサブクラス化を意図していません。」ナビゲーション コントローラーの向きの動作をオーバーライドせずに試しましたか? おそらく、ナビゲーション コントローラーはデフォルトで正しいことを行います。つまり、子コントローラーにクエリを実行して、方向がどうあるべきかを判断します。しかし、それをオーバーライドすることで、ビューの遷移中に予想したよりも複雑な正しい動作を壊しています。

サブクラスの代わりに標準の UINavigationController を使用することを除いて、すべてを同じにしてください。または、他の理由でサブクラスを削除できない場合は、簡単なテストのために次のコードをコメントアウトしてみてください。

/*- (BOOL)shouldAutorotate
{
    return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}*/

しかし、ドキュメンテーションでそうすべきでないと書かれているクラスをサブクラス化すると、何も正しく動作することに頼ることはできません。

于 2013-06-04T23:58:43.210 に答える