2 つのペン先 (iPad 用と iPhone 用に 1 つ) を追加するか、いずれかのインターフェイスに適切にスケーリングするペン先を 1 つ追加することができます。通常、画面のすべてまたはほとんどをカバーするビューを作成する場合は 2 つのペン先を追加し、iPhone ではフルスクリーンになるが、 iPad のポップオーバー。
チルダ サフィックス~ipad
およびについては、リソース プログラミング ガイドの「iOS がデバイス固有のリソースをサポート~iphone
する」という見出しの下で説明されています。接尾辞は、質問に書いたキャメルケースではなく、完全に小文字であることに注意してください。iOS は大文字と小文字を区別するファイルシステムを使用するため、これは重要です。
またはのNSBundle
ようなメッセージを使用してリソースのパスを取得すると、iOS はまず、現在のデバイスに応じて、またはのサフィックスを持つリソース ファイルを探します。たとえば、次のようにするとします。-[NSBundle pathForResource:ofType:]
-[NSBundle URLForResource:withExtension:]
~ipad
~iphone
NSString *path = [[NSBundle mainBundle] pathForResource:@"setup" ofType:@"plist"];
これを iPhone タイプのデバイス (iPod touch を含む)、または iPhone モードのシミュレーターで実行すると、iOS は最初にアプリ バンドルで という名前のファイルを探しますsetup~iphone.plist
。そのようなファイルが見つかった場合、そのファイルのパスが返されます。そのファイルが見つからない場合は、代わりに へのパスを返しますsetup.plist
。
これを iPad タイプのデバイス、または iPad モードのシミュレーターで行う場合、iOS は最初にアプリ バンドルで という名前のファイルを探しますsetup~ipad.plist
。そのようなファイルが見つかった場合、そのファイルのパスが返されます。そのファイルが見つからない場合は、代わりに へのパスを返しますsetup.plist
。
バンドルからリソースを取得する他のすべての API は の上に構築されているNSBundle
ため、すべてこのデバイス固有のルックアップの恩恵を受けます。つまり、 を使用する+[UIImage imageNamed:]
と、バンドルにデバイス固有のイメージがある場合は、デバイス固有のイメージが自動的に使用されます。を使用すると、デバイス固有の nib ( ) ファイルがバンドルにあれば、-[NSBundle loadNibNamed:owner:options:]
自動的に読み込まれます。.xib
サフィックスを使用すると、コードが簡素化されます。と を作成するMyViewController~ipad.xib
とMyViewController~iphone.xib
、アプリは現在のデバイスに適したものを自動的に読み込みます。ユーザー インターフェイスのイディオムを確認する必要はありません。NSBundle
あなたのためにそれをチェックします。(名前MyViewController~ipad.xib
とMyViewController.xib
and を使用して同じ効果を得ることもできます。)
ここで、「ユニバーサル」プロジェクトを作成したときに、Xcode がプロジェクト ファイルにViewController1_iPhone.xib
およびという名前を付けたことに気付いたかもしれViewController1_iPad.xib
ません。これはチルダ サフィックスを使用せず、ユーザー インターフェイス イディオムを調べて、それに応じてファイル名を選択するコードを含んでいました。ユニバーサル プロジェクト テンプレートがこれを行うのはなぜですか? わかりませんが、ばかです。ファイル名をチルダ サフィックスを使用するように修正し、ユーザー インターフェイスのイディオムをチェックするコードを削除することをお勧めします。