横向きモードの iPhone アプリ、2008 システム
-
08-06-2019 - |
質問
注記:この質問は 2008 年のもので、現在は歴史的にのみ興味深いものです。
デバイスの位置に関係なく、最初から横向きモードで実行される iPhone アプリケーションを作成する最良の方法は何ですか?
プログラムと Interface Builder の両方を使用します。
解決
歴史的な答えのみ。驚くほど時代遅れ:
この回答は現在では非常に古いものであることに注意してください。
この投稿は 単なる歴史的好奇心.
エキサイティングなニュースです!以下の 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 を用意することです。それが役に立てば幸い!
他のヒント
Apple 開発サイトから:
リスト2に示すように、ステータスバーが適切な位置に適切な位置にあるようにランドスケープモードでアプリケーションを開始するには、info.plistファイルを編集してuiinterfaceorientationキー(uiinterfaceorientationlandscaperightまたはuiinterfaceorientationlandscapeleft)を追加します。
リスト 2:ランドスケープモードでアプリケーションを起動します
<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
自分でテストした後のすべての投稿の要約と統合。以下の 4.x、5.x のアップデートを確認してください。
3.2 の時点では、実行中のアプリケーションの方向をコードから変更することはできません。
ただし、方向を固定してアプリケーションを起動することはできますが、これは簡単ではありません。
このレシピを試してみてください:
- 方向を次のように設定します
UISupportedInterfaceOrientations
の中にInfo.plist
ファイル - ウィンドウで 480x320 の「ベース ビュー コントローラー」を定義します。他のすべてのビューは、そのビューにサブビューとして追加されます。
- すべてのビューコントローラーで、
shouldAutorotateToInterfaceOrientation:
メソッド (もちろん、plist で定義したのと同じ値を返すため) すべてのビューコントローラーで背景ビューを設定します
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:ランドスケープモードのみを強制するにはどうすればよいですか?
@ロバート:参照してください iPhone SDK、NDA、およびスタック オーバーフロー.
まだ誰もこの答えを見つけていないことに驚きました。
私のすべてのテストでは、モーダルビューコントローラーを閉じるときに、親ビューコントローラーの優先方向が設定されていました。 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 プログラミング ガイドには、これに関する完全なセクションがあり、サンプル コードも含まれています。これは最近追加されたものだと思いますので、見逃しているかもしれません。遵守しなければならないすべての条件が説明されています。基本的に...
- Info.plist プロパティを設定します (これによりステータス バーの位置が変更されますが、ビューは変更されません)
- UIViewController viewDidLoad のいずれかで、ビューを中心を中心に手動で回転させます。メソッドまたはアプリケーションDidFinishLaunching:メソッドを使用するか、自動回転を実装します(「自動サイズ変更動作」、124ページ)
「横向きモードでの起動」、102 ページを参照してください。
この回答を参照してください: 横向きモードはiPhoneまたはiPadのみ
- plist に方向を追加する
- すべてのファイルで shouldAutorotateToInterfaceOrientation = YES
ただし、混合モードを使用している場合は、次の方が良いかもしれません。
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];