2つの異なるXIBファイルを持つユニバーサルアプリを作りたいです。1つはiPhone用、もう1つはiPad用です。それらは同じコードを使用しますが、UIは異なります。「ユニバーサル」アプリを作成するにはどうすればよいですか?
ありがとう。
xib ファイルを複製し、名前をFileName~ipad.xibに変更し、プロジェクトに追加するだけで、iOS はデバイスを参照する正しい xib ファイルを自動的にロードします。
開始点として (ビュー ベースのアプリケーションを作成していると言います)、iPhone または iPad ビューに基づいて作成します。
これにより、appdelegate、viewcontroller、およびビューが提供されます (選択したオプションに応じて、iPad または iPhone に合わせて調整されます)。
次に、別の xib を追加し、[ファイル] > [新しいファイル] に移動します... ダイアログの左側を見て、iOS グループの [ユーザー インターフェイス] を選択します。右側のペインで、[表示] を選択して [次へ] をクリックし、xib が作成されたときに (最初に選択したものに基づいて) iPad または iPhone を選択し、それを選択してから、メイン ペインの左側でファイルの所有者を選択します。次に、ユーティリティ (右側のペイン) に移動し、アイデンティティ インスペクター (上部の 3 番目のオプション アイコン) を選択して、ビュー ベースのアプリケーションを作成したときに作成されたものと同じ viewController になるようにクラスを変更します。両方のビューで同じ方法でアウトレットをバインドできますが、同じビューコントローラーを共有します。
実行時にアプリが実行されているデバイスを決定するには、規則を使用できます
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
この種の条件ステートメントに基づいてビューをロードします。わかりやすくするために、名前を使用して nib をロードすることを忘れないでください。これにより、環境 (上記) に関連する nib を選択でき、残りはフレームワークが行います。
iPad の領域を最大限に活用するアプリは、一般的に、専用のビューを使用した方がうまく機能する傾向がありますが、常にそうであるとは限りません。動的に追加される画面コンポーネントは、画面スペースの違いを考慮して、そのようにコーディングする必要があります。
これは簡単にエッセイになる可能性があります。いくつか読んで、ソース コードを確認し、飛び込んでみることをお勧めします。実験するだけで多くのことを学ぶことができます。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
UIInterfaceOrientation des=self.interfaceOrientation;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //ipad
{
if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
{
//Ipad portarit
}
else
{
//ipad landscape
}
else //iPhone
{
if (des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)
{
//iPhone portarit
}
else
{
//iPhone landscape
}
}
次のようにマクロを作成します。
#define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
これを実行できるように、XIB に名前を付けます。
self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];
既存のアプリがある場合は、ターゲットにオプションがあります-> iPad/iPhone のアップグレード
その後、アプリケーションが iPad または iPhone で実行されているかどうかを確認するコードを追加します。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
//load xib of ipad
}
else
{
//load xib of iphone
}
また、xcode 4 の機能を使用することもできます。新しいプロジェクトの作成中に、「ユニバーサル アプリ」と呼ばれるオプションがあります。このテンプレートに基づくアプリは、前述の分離を使用します。ビューを含むiphoneおよびipad用のフォルダーを取得します。