99

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


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

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

4

8 に答える 8

47

歴史的な答えのみ。見事に古くなっています。

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

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


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

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

2011 年 4 月の時点で、4.0 未満のものをテストしたりビルドしたりすることさえできないため、この質問は純粋に歴史的な好奇心です。これほど長い間開発者に多大な迷惑をかけたことは信じられないほどです!


これが元の議論と解決策です。これらのシステムは操作可能でさえないため、これは現在ではまったく関係ありません。


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

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

特に、「そして、shouldAutorotateToInterfaceOrientation をどこでも適切に使用する必要があります」と記載されている場合は、どこでも、すべてのフルスクリーン ビューを意味することに注意してください。

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

ここで、追加のよく知られた問題の重要な注意事項: 複数のビュー (すべてのランドスケープ) を切り替えようとしている場合、それは単純に機能しません。これを覚えておくことは不可欠です。そうしないと、問題に何日も費やすことになります。それは文字通り不可能です。これは、iOS プラットフォームで未解決の既知の最大のバグです。文字通り、ロードする 2 番目のビューをランドスケープにするハードウェアを作成する方法はありません。煩わしいが簡単な回避策であり、あなたがしなければならないことは、そこに座ってビューを切り替えるだけの簡単なマスター UIViewController を用意することです。

言い換えれば、iOS では重大な既知のバグが原因で、次のようになります。

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

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

于 2010-03-27T21:13:17.970 に答える
40

Apple Devサイトから:

ステータスバーがすぐに適切な位置にくるようにアプリケーションをランドスケープモードで起動するには、リスト2に示すように、Info.plistファイルを編集して、適切な値(UIInterfaceOrientationLandscapeRightまたはUIInterfaceOrientationLandscapeLeft)を持つUIInterfaceOrientationキーを追加します。

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

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
于 2008-08-31T14:38:14.460 に答える
28

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

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

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

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

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

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

    viewDidLoadメソッドで。

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

参考文献:

于 2010-05-07T11:02:01.247 に答える
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)]; 

このようにして、InterfaceBuilderのビューをランドスケープモードで操作できます。

于 2009-11-20T20:58:38.277 に答える
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、およびStackOverflowを参照してください。

于 2008-08-31T15:01:21.957 に答える
6

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

shouldAutorotateToInterfaceOrientation私のすべてのテストでは、モーダルView Controllerを閉じるときに、UINavigationControllerの一部であっても、設定された親View Controllerの優先方向が尊重されます。したがって、これに対する解決策は簡単です。

背景用の 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;
 }
...
}
于 2010-11-27T07:38:02.030 に答える
5

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

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

102 ページの「横向きモードでの起動」を探してください。

于 2008-09-04T21:57:05.077 に答える
4

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

  1. plistに向きを追加
  2. shouldAutorotateToInterfaceOrientation = すべてのファイルで YES

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

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
于 2011-03-06T07:56:44.363 に答える