2

2つの異なるXIBファイルを持つユニバーサルアプリを作りたいです。1つはiPhone用、もう1つはiPad用です。それらは同じコードを使用しますが、UIは異なります。「ユニバーサル」アプリを作成するにはどうすればよいですか?

ありがとう。

4

6 に答える 6

6

xib ファイルを複製し、名前をFileName~ipad.xibに変更し、プロジェクトに追加するだけで、iOS はデバイスを参照する正しい xib ファイルを自動的にロードします。

于 2012-03-03T06:22:13.433 に答える
5

開始点として (ビュー ベースのアプリケーションを作成していると言います)、iPhone または iPad ビューに基づいて作成します。

これにより、appdelegate、viewcontroller、およびビューが提供されます (選択したオプションに応じて、iPad または iPhone に合わせて調整されます)。

次に、別の xib を追加し、[ファイル] > [新しいファイル] に移動します... ダイアログの左側を見て、iOS グループの [ユーザー インターフェイス] を選択します。右側のペインで、[表示] を選択して [次へ] をクリックし、xib が作成されたときに (最初に選択したものに基づいて) iPad または iPhone を選択し、それを選択してから、メイン ペインの左側でファイルの所有者を選択します。次に、ユーティリティ (右側のペイン) に移動し、アイデンティティ インスペクター (上部の 3 番目のオプション アイコン) を選択して、ビュー ベースのアプリケーションを作成したときに作成されたものと同じ viewController になるようにクラスを変更します。両方のビューで同じ方法でアウトレットをバインドできますが、同じビューコントローラーを共有します。

実行時にアプリが実行されているデバイスを決定するには、規則を使用できます

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

この種の条件ステートメントに基づいてビューをロードします。わかりやすくするために、名前を使用して nib をロードすることを忘れないでください。これにより、環境 (上記) に関連する nib を選択でき、残りはフレームワークが行います。

iPad の領域を最大限に活用するアプリは、一般的に、専用のビューを使用した方がうまく機能する傾向がありますが、常にそうであるとは限りません。動的に追加される画面コンポーネントは、画面スペースの違いを考慮して、そのようにコーディングする必要があります。

これは簡単にエッセイになる可能性があります。いくつか読んで、ソース コードを確認し、飛び込んでみることをお勧めします。実験するだけで多くのことを学ぶことができます。

于 2011-06-07T21:26:49.937 に答える
1
- (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
    }
}
于 2012-06-05T04:33:29.660 に答える
1

次のようにマクロを作成します。

#define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)

これを実行できるように、XIB に名前を付けます。

self.viewController = [[ViewController alloc] initWithNibName:IS_IPAD?@"ViewController~iPad":@"ViewController" bundle:nil];
于 2012-03-20T05:46:27.597 に答える
0

既存のアプリがある場合は、ターゲットにオプションがあります-> iPad/iPhone のアップグレード

その後、アプリケーションが iPad または iPhone で実行されているかどうかを確認するコードを追加します。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    //load xib of ipad
}
else
{
    //load xib of iphone
}
于 2011-06-08T12:03:20.240 に答える
0

また、xcode 4 の機能を使用することもできます。新しいプロジェクトの作成中に、「ユニバーサル アプリ」と呼ばれるオプションがあります。このテンプレートに基づくアプリは、前述の分離を使用します。ビューを含むiphoneおよびipad用のフォルダーを取得します。

于 2011-06-30T12:44:32.977 に答える