2009-12-11 16 views
8

私はいくつかのペン先を持つiPhoneアプリケーションを開発しています。ランドスケープのみ複数のペン先のあるiPhoneアプリ

アプリケーションはInfo.plistファイルを介して横向きモードで開始するように設定されています。

私は2つのビューコントローラ: FirstViewControllerSecondViewControllerを持っています。

これらのそれぞれには、ビューが横長のnibファイルがあります。両方のView Controllerがアウトレットとして私のMainView nibに追加され、ビューが遅延初期化されます。

アプリケーションが読み込まれると、最初のビューが予想通りに横向きに表示されます。しかし、私が2番目のビューに切り替えると、デバイス(またはシミュレータ)はランドスケープにとどまりますが、デバイスがポートレートモードになっているかのようにビューが回転し、インターフェイスが制動されます。私は次のコードを持っている両方UIViewControllerクラスで

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return interfaceOrientation == UIInterfaceOrientationLandscapeRight; 
} 

とビューを切り替えることを、私のアプリデリゲートに私がやっている:

[viewController.view removeFromSuperview]; 
[window addSubview:secondViewController.view]; 

viewControllersecondViewControllerは二つの出口がありますビューコントローラが接続されています。

これは、2番目のビューは、IBでどのように見えるかです: alt text http://img27.imageshack.us/img27/4898/picture1ni.png

と、これはそれがシミュレータでどのように見えるかです: alt text http://img402.imageshack.us/img402/4866/picture2wt.png

2番目のビューは、風景ではなくインターフェイスに表示されていることであるのはなぜ回転?

私は変換プロパティを扱いたくありません。それは過剰なようです。

答えて

3

誰かにあなたに洞察力のある応答を与え、私は何かを学ぶことを望みました。悲しいことに、これを正しく動作させるためにトランスフォームを使用する必要があるかもしれません。必要に応じて、力が回転、あなたの新しいビューを追加しているときに、現在の向きを確認

- (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に適切に対応したいと思う:これはすべてのnecesない場合

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

私は別の解決策を聞くのが大好きですセリー。この設定で気付いた点も1つあります。ビュー間の遷移があり、その遷移中に電話機を回転させると、ビューの向きが反転したり間違った横向きにずれたりする可能性がありますビュー間を移動するときに電話機を横に(横向き - 右向き - 左向き)する必要があります。

+0

これまでのところ、これは私が欲しいものを達成する最も信頼できるアプローチであることが判明しました。 – pgb

+0

これは(最初の方法)私のために働いた。何時間も解決策を探していましたが、以前同様のことを試しました(しかし、didLoadのビュー内で...)。上記の変換をサブビューとして追加する前に適用します。 – Wollan

0

これは単なる提案ですが、2番目のビューのshouldAotorotateメソッドでNOを返そうとすることができます。または、IBのポートレートビューで作成してみてください。あなたのビューは正しく(横長モードで)読み込まれたが、shouldAutorotateメッセージを受け取って90度回転したようだ。

+0

私はすでにそれを試して、うまくいきませんでした。 – pgb

関連する問題