2012-04-16 7 views
0

私はこの問題に関して多くの質問があることを認識していますが、私の問題を解決するものは見つかりませんでした。iPad/iPhoneオリエンテーションの問題

開始するには、私は私のmenu.h向きと

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

ステータスバーの変更を、このコードを設定しているが、ビューが回転したり、サイズ変更されていません。私の問題を絞り込むしようとするためには、私はiOSのシミュレータでオリエンテーション

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; 
    } 
    -(void) orientationChanged:(NSNotification *)object 
{ 
    UIDeviceOrientation deviceOrientation = [[object object] orientation]; 

    if (deviceOrientation == UIDeviceOrientationLandscapeLeft || deviceOrientation == UIDeviceOrientationLandscapeRight) 
    { 
     self.view = self.landscapeView; 
    } 
    else 
    { 
     self.view = self.portraitView; 
    } 
} 

に基づいて1 .xib内の2つのビューを切り替えるにしようとすることを決めた、ビューは間違いなく、特定のビューに変更します。しかし、風景写真は肖像画と横向きのように見えます。

向き変更後のiOSシミュレータで私の風景ビューenter image description here

IB の私の風景ビュー enter image description here

私がここで間違って何をしているのですか?私はそれを理解することはできません、どんな助けも大いに感謝されるでしょう。前もって感謝します。 **編集:新しいコードの下に** 私の問題は、ビューが横向きで正しくロードされ、横向きです。そのため、横向きのビューが読み込まれます。 @Seegaに基づいて私の改訂版のコードは次のとおりです。

​​
+0

すべての[[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];を削除します。[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged :) name:@ "UIDeviceOrientationDidChangeNotification"オブジェクト:nil]; '完全な' - (void)orientationChanged :(NSNotification *)オブジェクトの関数です。 UIInterfaceOrientationLandscapeLeftとUIInterfaceOrientationLandscapeRightを使用する 機能が期待どおりに機能するかどうかを確認するだけで、別のUIViewを設定する代わりにifステートメントの色を変更するだけで追加できます。 – Seega

+0

私の最後には運がありません。説明どおりに設定して、orientationChanged関数内にブレークポイントを入力しましたが、それはまったく呼び出されていません。 –

+0

気をつけてくださいorientationChanged:あなたはそれを必要としません!!!! 単に使用 ' - (ボイド)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation時間:(NSTimeInterval)期間 {IF(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {self.view = self.landscapeView。 } else { self.view = self.portraitView; } } ' – Seega

答えて

0

皆さん、ありがとうございます。私は友人の助けがあり、問題が完全にはわからない。彼がしたことを私が知っていることを私はあなたに伝えることができます。

  1. 障害者たちの広告が一時的に

  2. は完全に2番目のビューを削除し、ネイティブの向きで行き、

  3. のサイズを変更するほぼすべての.mファイルにこれを追加しました。同様

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {  
    return YES; 
    

    }

  4. プログラムで申し訳ありませんが、私は完全に私がやる、答えを説明することはできません。この

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
        if (interfaceOrientation == UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight) 
        { 
          if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) 
          {   
           self.Button.frame = CGRectMake(27,96,86,86); 
           self.Label.frame = CGRectMake(27,162,86,21); 
          } 
         else 
         { 
           self.Button.frame = CGRectMake(18,100,86,86); 
           self.Label.frame = CGRectMake(18,164,86,21); 
          } 
        } 
    } 
    

に似た他のビューの数を変更オリエンテーションに影響を与えたプロジェクトに含まれていたすべてを完全に理解することはできません。私はまだiOS開発の新機能です。

1

あなたがよりよい単に代わりに独自のものを作成の回転を処理するために

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     self.view = self.landscapeView; 
    } 
    else 
    { 
     self.view = self.portraitView; 
    } 
} 

を使用する必要があります。
これですべての通知を削除できます。

+0

' - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientationの持続時間:(NSTimeInterval)duration { [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:自己セレクタ:@selector(orientationChanged :) name:@ "UIDeviceOrientationDidChangeNotification"オブジェクト:nil]; }これはあなたが念頭に置いたことですか?これは私のためには機能しません。助けてくれてありがとうございます –

+0

上記のコードの問題は、UIDeviceOrientationとUIInterfaceOrientationが異なるため、toInterfaceOrientation == UIDeviceOrientationかどうかをチェックしていることです。その違いについての詳細を知る - http://stackoverflow.com/questions/6838706/iphone-screen-rotation – RachelC

+0

あなたは絶対に正しいです、それを認識しませんでした – Seega

1

次のように、すべての方向のサポートが選択されていることを確認できますか?私はこれを試して、それは私のために正常に動作しているようだ。

enter image description here

+0

はい、サポートされているすべてのデバイスオリエンテーションボックスが選択されています。 –

4

私はであなたのコードを置くことをお勧め:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

の代わりに、新しい方法を作ります。 shouldAutorotateToInterfaceOrientationメソッドがそのローテーションに対してYESを返すと、これは自動的に呼び出されます。

また、UIDeviceOrientationとUIInterfaceOrientationには違いがありますので、正しいものを参照してください。あなたの既存のコードは次のように変更します。

if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
{ 
    self.view = self.landscapeView; 
} 
else 
{ 
    self.view = self.portraitView; 
} 

また、あなたはあなたのコードクリーナーを維持するインターフェイスの向きを確認するために、マクロを使用することができます。

if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) 
{ 
    self.view = self.landscapeView; 
} 
else 
{ 
    self.view = self.portraitView; 
} 
+0

「UIDeviceOrientation」または「UIInterfaceOrientation」を使用する必要がありますか? – Shamoon

+0

UIInterfaceOrientationを使用する必要があります。これは、アプリケーションがポートレートでしか動作せず、ユーザーがデバイスを横向きに回転させると、アプリはポートレートのように見え、ちょうど横になっているため、UIDeviceOrientationをチェックするとデバイスが回転しているために横向きになることがありますが、UIInterfaceOrientationをチェックすると、アプリケーション自体が回転しなかったため、ポートレートとして読み取られます。これは理にかなっていますか?さらに詳しい情報 - > http://stackoverflow.com/questions/6838706/iphone-screen-rotation – RachelC

+1

これは意味があります、ありがとうございます。しかし、どのようにデバイスと一緒に回転するようにアプリを設定していますか? –

1

アイデア!!!

インターフェイスビルダーでビューを設定してから、ビューが回転するときに表示される実際のビューを切り替える場合は、向きに合わせるだけでなく、その特定の向きでビューを構築する必要があります。Interface Builderであなたの.xibを開き

  • :これを確認するには

  • オブジェクトの下の 'ビュー'をクリックすると、ビュー全体が選択されます。
  • IBの右側にある「シミュレートされた指標」の下を見てください。 「Orientation」ドロップダウンで「Landscape」が選択されていることを確認します。

あなたのビューでは、それはXcodeのは、肖像画にあなたのランドスケープビューを回転し、プレゼンテーションをいじりされている可能性があり、あなたのlandscapeViewを表現したいビューのための「ポートレート」と言った場合。

これが役立ったかどうか教えてください。

+0

一貫したヘルプをいただき、ありがとうございます。 portraitViewはportaitに設定され、landscapeViewはlandscapeに設定されます。 –

+0

ダーン私は何かを持っていると思った。 – RachelC

関連する問題