この質問は2008年からのものであり、現在は歴史的にのみ関心があることに注意してください。
デバイスの位置に関係なく、最初から横向きモードで実行するiPhoneアプリケーションを作成する最良の方法は何ですか?
プログラムとInterface Builderの両方を使用します。
この質問は2008年からのものであり、現在は歴史的にのみ関心があることに注意してください。
デバイスの位置に関係なく、最初から横向きモードで実行するiPhoneアプリケーションを作成する最良の方法は何ですか?
プログラムとInterface Builderの両方を使用します。
回答:
この回答は非常に古くなっていることに注意してください/
この答えは歴史的な好奇心にすぎません。
エキサイティングなニュース!以下の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を用意することです。それが役に立てば幸い!
Apple Dev Siteから:
アプリケーションをランドスケープモードで開始してステータスバーを適切な位置にすぐに配置するには、Info.plistファイルを編集して、UIInterfaceOrientationキーに適切な値(UIInterfaceOrientationLandscapeRightまたはUIInterfaceOrientationLandscapeLeft)を追加します(リスト2を参照)。
リスト2:アプリケーションを横長モードで起動する
<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
自分でテストした後、すべての投稿の要約と統合。以下の4.x、5.xのアップデートを確認してください。
3.2以降では、実行中のアプリケーションの向きをコードから変更することはできません。
ただし、これは簡単なことではありませんが、固定された方向でアプリケーションを起動できます。
このレシピで試してください:
UISupportedInterfaceOrientations
に設定しInfo.plist
ますshouldAutorotateToInterfaceOrientation:
メソッドを設定します(もちろん、plistで定義したのと同じ値を返します)すべてのView Controllerで、背景ビューを設定します
self.view.frame = CGRectMake(0, 0, 480, 320)
中viewDidLoad
の方法。
アップデート(iOS 4.x、5.x):Apple iOSアプリプログラミングガイドの「高度なアプリのトリック」の章に「横長モードでの起動」の段落があります。
参照:
まず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のビューを横長モードで操作できます。
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を参照してください。
まだ誰もこの答えを考え出していないことに驚いています。
私のすべてのテストでは、モーダルビューコントローラーを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;
}
...
}
最新のiPhone OSプログラミングガイドには、サンプルコードを含むこれに関する完全なセクションがあります。これは最近の追加だと思いますので、見逃したかもしれません。それはあなたが従わなければならないすべての条件を説明しています。基本的に...
102ページの「横向きモードでの起動」を探します。
この回答を参照してください:iPhoneまたはiPadのみの横向きモード
ただし、混合モードを使用している場合は、
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];