2011-12-16 22 views
2

すべてのデバイス向きをサポートするiPhoneアプリがありますが、私はランドスケープでのみ表示する特定のモーダル表示を持っています。デバイスの向きとは異なる向きのモーダル表示

デバイスが横向きの場合、正常に動作しますが、デバイスが物理的に縦向きに保持されている場合、デバイスの向きは表示されません。

デバイスが縦向きに保持されているため、画像が切り取られ、左右の端がディスプレイの端から外れています。画像は狭い寸法と同じ高さしかないので、上と下が親ビューの背景を示します。私がデバイスを横向きに回転させると、すべてがうまくいきます。私の研究では

は私が頻繁にshouldAutorotateToInterfaceOrientation渡って来るが、私はそれが私の状況には適用されないデバイスが物理的に回転させたときにのみトリガーされますイベントであると考えています。デバイスは物理的に縦向きに保持されていますが、あたかも横長のままにしているかのように表示したいと考えています。

[[のUIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight]も言及されているが、私はそれを使用して試したいかなる効果を有することを見たことがありません。

私の質問は、デバイスの物理的な向きとは異なる方向でビューの最初の表示を強制する簡単な方法があり、それを行う方法が正確にある場合です。私はモーダル私のビューを表示するには、次のロジックを使用しています

TitleViewController *titleController = [[TitleViewController alloc] initWithNibName:@"TitleViewController" bundle:[NSBundle mainBundle]]; 
    titleController.delegate = self; 
    titleController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:titleController animated:YES]; 
    [titleController release]; 

私は、デバイスが縦向きに保持されている場合でも、常に横向きでのモーダルビューを表示します。

UPDATE機能するソリューションが見つかり

if (self.interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
    } 

をしかし、オリエンテーションUIInterfaceOrientationPortraitUpsideDownを扱うときには、それが最初に正しい向きでビューを表示しますが、その後に戻ってそれをシフト側面が切り取られた縦向きで、画像の上下に背景が表示されます。私はいつも270、-90、および他の値だけに角度を微調整しようとしている

UIInterfaceOrientationPortraitUpsideDown向きのときにポートレートに戻ります。

なぜですか?

答えて

2

に変更するには、このアプローチを、それを却下しようと、私は必要なすべてをした:

if (self.interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
     self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); 
     self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
    } 

    TitleViewController *titleController = [[TitleViewController alloc] initWithNibName:@"TitleViewController" bundle:[NSBundle mainBundle]]; 
    titleController.delegate = self; 
    titleController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:titleController animated:YES]; 
    [titleController release]; 

を前の向きを回転させる私のモーダルビューを提示する。

そして、オリエンテーションが不要なので、UIInterfaceOrientationPortraitUpsideDownのサポートを削除しました。

0

解決方法1:初期のポートレートモードから開始方向を変更するには、info.plistファイルを編集する必要があります。 「intial interface orientation」のエントリを追加し、必要な値を設定します。

Hereは、info.plistファイルの場所を示すスクリーンショットです。(リンクが機能しない場合は、コメントを残してください)


解決方法2:窓や向きの通知にサブビューが最初に送信されるとあなたはまた、あなたのナビゲーションコントローラでこれを試すことができます「ウィンドウ」のサブビュー

//.m file 
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    // Hide status bar 
    application.statusBarHidden = YES; 
     // --- Add the view controller's view to the window and display. 
    [window addSubview:viewController.view]; 
    [viewController.view addSubview:navigationController.view]; 
    [window makeKeyAndVisible]; 
    return YES; 
} 
+0

問題は、モーダルビューが最終的に要求されて表示される前に、方向が何度も変更され、任意の方向になる可能性があることです。やや動作するようには思えない – GRW

1

あなたが試してみました:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

そして、あなたは肖像

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait]; 
+0

は、しかし、それは(多少)動作するようには思えないの警告 – GRW

+0

を生成し、しかし、それは警告を生成しない: 「UIDeviceは」に応答しないこと「-setOrientation:」 を、さらにI公開APIに含まれていないと読んでいます.Appleはそれを使用するアプリケーションを拒否します。 – GRW

+0

このメソッドを(私のように)使用することができます... – Maulik

関連する問題