2010-11-30 10 views
0

私はこのNIBとビューを持つこのiPadアプリケーションを持っています。 各ビューには2つのNIBがあります.1つは鉢の向き用と1つはランドスケープ用ですので、プログラムでNIBを特定のUIViewControllerに切り替える方法を探しています。UIViewControllerビューを変更する最善の方法NIBプログラムで

は、今私は、各コントローラのwillRotateToInterfaceOrientation方法で使用しています。この機能があります。

void UIHandleRotation(UIViewController *controller, NSString *nibName, UIInterfaceOrientation orientation, BOOL transform){ 
    double angle = 0.0; 

    if(orientation == UIInterfaceOrientationPortrait) { 
     angle = PI * 2 /* 360° */; 
    } 
    else if(orientation == UIInterfaceOrientationLandscapeLeft){ 
     angle = PI + PI/2 /* 270 ° */; 
     // Each landscape nib is [nib-name]L 
     nibName = [NSString stringWithFormat:@"%@L", nibName]; 
    }  

    [[NSBundle mainBundle] loadNibNamed:nibName owner:controller options:nil]; 
    if(transform) { 
     controller.view.transform = CGAffineTransformMakeRotation(angle); 
    } 
} 

をしかし、それは私に奇妙な行動(めちゃめちゃUIコントロールの位置を与えて、出口は、インタフェースのように関連付けられていませんビルダーなど)。

何か間違っているのですか、これを実装するより良い方法がありますか? おかげ

注:私はナビゲーションコントローラを使用していないので、私はあなたのUIViewControllerは2つのUIViewsを持つことになりますので、あなたは、ペン先ごとにビューを持っている必要があります。このソリューションEasiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape?

答えて

1

nibsを切り替える必要はありません。コントローラを切り替える必要があります。

ためこの回答を参照してください:Easiest Way to Support Multiple Orientations

+0

私が今追加したメモを参照してください。 –

+0

ナビゲーションコントローラを使用すると、これを行う最も簡単な方法が使用できます。インターフェイスのナビゲーションコントローラを公開する必要はありません。リンク先の例はそうしていません。ユーザーはナビゲーションコントローラが使用されていることを伝えることはできません。 – TechZen

0

に使用することはできません。 1つはポートレート用、もう1つはランドスケープ用です。

0

をなぜあなたは同じ方法でプログラム的に必要なコントロールを処理することができます異なるorientations.Youのための1つのペン先を使用する必要があり、同じview.Youのための2つのニブを使用する必要があります

willRotateToInterfaceOrientation

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

3

フレーム(0,0,768,1024)のあるポートレート(potraitView)とフレーム(0,0,1024,768)のある風景(landScapeView)の の2つのビューを持つNIBを1つだけ使用してください。 必要に応じて、両方のビュー(potraitViewおよびlandScapeView)でコントロールを設定します。

と、この後、ビューのロード、デフォルトの向き何で私はあなたが知りたいと思うのよう

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
{ 
landScapeView.hidden = YES; 
portraitView.hidden = NO; 

} 

else{ 

landScapeView.hidden = NO; 
portraitView.hidden = YES; 

} 
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
      interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
} 

こんにちはしたままのデバイスの向きに応じてビューを設定することができ、どのように私はこの方向に応じてビューを読み込むことができます。 あなたが求めているとして、あなたのアプリケーションと同じクラスビューのロードを実行すると、この問題は、その後、

IS-answesは、その後、同じされている場合は - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation メソッドが自動的に呼び出されます。次に、あなたのデバイスの方向を返し、(上記と同じコードを使用して)この方向に従ってビューを設定します。 私はあなたがもっとやる必要はないと思う。

+0

どのように私は正確にデフォルトのビューアウトレットを処理するのですか?投稿を編集して、IB全体の作成/バインドを教えてください。 –