横長モードのiPhoneアプリ、2008システム


98

この質問は2008年からのものであり、現在は歴史的にのみ関心があることに注意してください。


デバイスの位置に関係なく、最初から横向きモードで実行するiPhoneアプリケーションを作成する最良の方法は何ですか?

プログラムとInterface Builderの両方を使用します。


5
今後の読者のために、この有名な問題 2011年の時点でAppleによって解決れていることに注意してください。以下の回答のテストプロジェクトに注意してください。
Fattie

回答:


47

歴史的な答えのみ。見事に時代遅れです。

この回答は非常に古くなっていることに注意してください/

この答えは歴史的な好奇心にすぎません


エキサイティングなニュース!以下のAndrewが発見したように、この問題はAppleの4.0以降で修正されています。

すべてのビューでビューのサイズを強制する必要がなくなったように見え、ランドスケープの「初めてしか機能しない」という特定の深刻な問題が解決されました。

2011年4月の時点では、4.0未満のものをテストしたりビルドしたりすることは不可能であるため、問題は純粋に歴史的な好奇心です。開発者がこれほど長い間トラブルを引き起こしたのは信じられないほどです。


これが最初の議論と解決策です。これらのシステムは操作さえできないので、これは今では全く無関係です。


これを完全に機能させることは非常に困難です。少なくとも3つの問題/バグが存在します。

これを試してください.. インターフェースビルダーのランドスケープデザイン

特に、「どこでも適切にshouldAutorotateToInterfaceOrientationを使用する必要がある」とある箇所は、すべてのフルスクリーンビューを意味します。

それがこの悪夢に役立つことを願っています!

ここで手に追加のよく知られた問題の重要リマインダー:あなたが間スワップしようとしている場合は、複数のビュー(すべての風景が)、それは単に動作しません。これを覚えておくことが不可欠です。そうしないと、問題で何日も無駄になってしまいます。文字通り不可能です。これは、iOSプラットフォームにおける最大のオープンな既知のバグです。ハードウェアがロードする2番目のビューを横向きにする方法は文字通りありません。面倒ですが単純な回避策と、あなたがしなければならないことは、そこに座ってビューを切り替えられるようにする小さなUIUIControllerを用意することです。

言い換えると、iOSでは、既知の大きなバグが原因です。

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

一度しかできません。その後、happyThing.viewを削除しようとして、代わりにnewThing.viewを追加すると、機能しません-それだけです。マシンがビューを横向きに回転させることはありません。トリックの修正はありません。Appleがそれを機能させることはできません。採用する必要がある回避策は、単にそこに座って、さまざまなビュー(happyThing、newThingなど)だけを保持する全体的なUIViewControllerを用意することです。それが役に立てば幸い!


2
これは4.xで修正されたと思います。さまざまな画面、横向き、縦向きがたくさんあるゲームを出荷しましたが、3.xでは動作しませんでした。それを処理するために追加のダミービューを使いたくないので、代わりに4.xが必要でした。この質問が尋ねられてから1年後、おそらくOKです。
AndrewS 2011

私たちは「常に風景」ではなく、さまざまな風景やポートレートを作りました。各VCはウィンドウに直接追加され、ウィンドウから削除されます。アプリはランドスケープを起動し、いくつかの画面遷移を通じてそのままです。ダミービューは使用しませんが、すべての画面でshouldAutorotateをオーバーライドします。タッチからパッド、電話まで、4.xでは問題ありません。
AndrewS

41

Apple Dev Siteから:

アプリケーションをランドスケープモードで開始してステータスバーを適切な位置にすぐに配置するには、Info.plistファイルを編集して、UIInterfaceOrientationキーに適切な値(UIInterfaceOrientationLandscapeRightまたはUIInterfaceOrientationLandscapeLeft)を追加します(リスト2を参照)。

リスト2:アプリケーションを横長モードで起動する

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

5
これに加えて、shouldAutorotateToInterfaceOrientationメソッドの戻り値は(interfaceOrientation!= UIInterfaceOrientationPortrait); これで完了です。
Michael Behan

5
横向きモードでデバイスを起動する方法を質問します。答えはその情報を提供します。その後のオリエンテーションの扱いについては質問に記載していません。+1マイケル・プライアー
10

1
興味深いことに、「答え」は実際にはデバイスを横長モードで起動しません-!! これはおそらく、すべてのApple環境で最も有名なバグ/難易度です。それは非常に働いているiPad開発者にとっての基本です!
Fattie

@mbehan UIInterfaceOrientationPortraitUpsideDownもあり、修正されていません。さらに、.plistのUIInterfaceOrientationは3.2+以降でのみサポートされており、3.1.3以降のデバイスではサポートされていません(iPhone 2Gがそのバージョンでスタックしていることに注意してください)。
IvanVučica11年

28

自分でテストした後、すべての投稿の要約と統合。以下の4.x、5.xのアップデートを確認してください。

3.2以降では、実行中のアプリケーションの向きをコードから変更することはできません。

ただし、これは簡単なことではありませんが、固定された方向でアプリケーションを起動できます。

このレシピで試してください:

  1. ファイルの方向をUISupportedInterfaceOrientationsに設定しInfo.plistます
  2. ウィンドウで480x320の「ベースビューコントローラ」を定義します。他のすべてのビューは、そのビューのサブビューとして追加されます。
  3. すべてのビューコントローラーでshouldAutorotateToInterfaceOrientation:メソッドを設定します(もちろん、plistで定義したのと同じ値を返します)
  4. すべてのView Controllerで、背景ビューを設定します

    self.view.frame = CGRectMake(0, 0, 480, 320)

    viewDidLoadの方法。

アップデート(iOS 4.x、5.x):Apple iOSアプリプログラミングガイドの「高度なアプリのトリック」の章に「横長モードでの起動」の段落があります。

参照:


1
これが唯一の真に有効なソリューション(わずかな追加を含む)であることを確認できます。これを見つけて評価するのに何時間もかかりました。他のすべての回答は、問題の部分的な解決策にすぎません。
ヨハネスルドルフ

8

まずinfo.plistで設定します

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

次に、このコードをapplicationDidFinishLaunchingに配置します。

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

このように、Interface Builderのビューを横長モードで操作できます。


7

sasbとmichaelpryorの答えは正しいようですが、うまくいかない場合は、次の方法を試してください。

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

またはこれ:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

またはこれ:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

window makeKeyAndVisible;最初に電話する必要がある場合もあります。

いくつかのリンク:横長モードでの開発iPhone SDK:横長モードのみを強制する方法?

@Robert:iPhone SDK、NDA、Stack Overflowを参照してください。


6

まだ誰もこの答えを考え出していないことに驚いています。

私のすべてのテストでは、モーダルビューコントローラーをshouldAutorotateToInterfaceOrientation閉じると、UINavigationControllerの一部である場合でも、親ビューコントローラーの優先方向の設定が反映されます。したがって、これに対する解決策は簡単です。

背景にUIImageViewを使用してダミーのUIViewControllerを作成します。画像を、アプリが起動時に使用するdefault.png画像に設定します。

ときにviewWillAppearあなたのルートビューコントローラに呼び出されます、ただアニメーションせずにダミーのビューコントローラを提示。

ときviewDidAppearあなたのダミーのビューコントローラに呼び出される、アニメーションを溶解素敵なクロスとビューコントローラを却下。

これはうまくいくだけでなく、見栄えも良いです!ところで、わかりやすくするために、ルートビューコントローラーを次のviewWillAppearようにします。

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}

5

最新のiPhone OSプログラミングガイドには、サンプルコードを含むこれに関する完全なセクションがあります。これは最近の追加だと思いますので、見逃したかもしれません。それはあなたが従わなければならないすべての条件を説明しています。基本的に...

  • Info.plistプロパティを設定します(これにより、ステータスバーの位置は変更されますが、ビューは変更されません)。
  • UIViewController viewDidLoad:メソッドまたはapplicationDidFinishLaunching:メソッドのいずれかで、ビューを中心を中心に手動で回転させるか、自動回転を実装します(「自動サイズ変更動作」、124ページ)。

102ページの「横向きモードでの起動」を探します。


4

この回答を参照してください:iPhoneまたはiPadのみの横向きモード

  1. plistに向きを追加する
  2. 全ファイルでshouldAutorotateToInterfaceOrientation = YES

ただし、混合モードを使用している場合は、

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.