質問
私はいくつかのニブを持っているiPhoneアプリケーションを開発していて、唯一の風景である必要があります。
アプリケーションは、そのInfo.plistファイルを経由してランドスケープモードで起動するように設定されます。
私は2つのビューコントローラを持っています:
FirstViewController
とSecondViewController
ます。
これらのそれぞれのために私は、nibファイルを持っています。どちらのビューコントローラが店としての私のMainView
のペン先に追加され、彼らの意見が遅延初期化されます。
と、アプリケーションがロード予想通り、最初のビューは、風景の中に表示されます。私は2番目のビューに切り替えたときに、デバイスが私のインターフェイスを制動、ポートレートモードにあるかのようしかし、デバイス(または、シミュレータ)は、風景の中に残っているが、ビューを回転させます。
両方UIViewController
クラスでは、私は次のコードを持っています
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return interfaceOrientation == UIInterfaceOrientationLandscapeRight;
}
とビューを切り替えるには、私のアプリデリゲートに私がやってます:
[viewController.view removeFromSuperview];
[window addSubview:secondViewController.view];
ここでviewController
とsecondViewController
ビューコントローラが接続された2つの出口である。
この第二ビューはIBでどのように見えるかです: altテキストhttp://img27.imageshack.us/img27/4898/picture1ni.png の
これは、それがシミュレータでどのように見えるかです: altテキストhttp://img402.imageshack.us/img402/4866/picture2wt.png の
なぜ第2のビューが風景ではなく、回転インターフェースで表示されることがありますか?
それはやり過ぎと思われるので、私は、変換プロパティに対処するために好きではないでしょう。
解決
私は誰かがあなたに洞察力の応答を与えるだろうと私は何かを学ぶだろうと期待して、この質問を主演...悲しげに、私はあなたが正しく動作するために、これを取得するための変換を使用する必要があるかもしれないと恐れています。ここで私は問題を解決するために、最近使用してきたコードは次のとおりです。
- (void)forceLandscapeForView:(UIView *)theView {
theView.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
theView.bounds = CGRectMake(0, 0, 480, 320);
theView.center = CGPointMake(160, 240);
[theView setNeedsLayout];
[theView setNeedsDisplay];
}
あなたの新しいビューを追加しているとき、すると、現在の向きを確認し、必要な力回転の場合:
if (!UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
[self forceLandscapeForView:_activeViewController.view];
}
そして、もちろん、あなたのビューコントローラのそれぞれにshouldAutorotateToInterfaceOrientation
に適切に対応したいと思う。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
私は、これはすべての必要がなければ、代替ソリューションについて聞くのが大好きです。私は、このセットアップで気づいた1つの警告もあります:あなたは、ビュー間の遷移を持って、そしてあなたがその遷移中に携帯電話を回転させる場合はビューの向きが反転したり、間違った横向きの「スタック」を取得するために、それは、そのようなことが可能ですあなたはビュー間をナビゲートする(ランドスケープ左対風景右)の上に携帯電話をオンにする必要があること。
他のヒント
これは単なる提案ですが、2番目のビューのためにshouldAotorotate方法にNOを返すことを試みることができます。またはIBでのポートレートビューでそれを作ってみます。 (ランドスケープモードで)あなたのビューが正しくロードされたようだが、その後shouldAutorotateメッセージを受信し、90度回転されていました。