web-dev-qa-db-ja.com

iPad Miniの画面サイズを扱う

新しいiPad Miniの画面サイズは7.9インチです。 Retinaディスプレイはありますか?既存のxibとストーリーボードを自動的にスケーリングしますか、それとも2つのバージョンを作成する必要がありますか?

IPhone 5を扱う方法と同様に対処しますか?

デバイスでiPad Miniが実行されているかどうかを確認するための定義または条件を作成するにはどうすればよいですか?

60
MCKapur

アプリがiPad 1またはiPad 2で動作する場合、新しいiPad miniでもそのまま動作します。ミニには網膜ディスプレイはありません。アプリの観点から見ると、iPad 2と同じです。

編集:iPad miniでアプリが実行されているかどうかを判断する方法を尋ねられました。このためのAPIチェックはありません。画面サイズは役に立ちません。 UI_USER_INTERFACE_IDIOM()は役に立ちません。誰かが実際に持っているまで、_UIScreenMode pixelAspectRatio_が異なるかどうかを知る方法はありません(おそらくiPad 2と同じです)。

これにより、uname()からmachineを取得し、この値に対するチェックをハードコードするという1つの可能性のみが残ります。これは決して望ましいアプローチではありません。そして、この記事の執筆時点では、その価値がどうなるかはわかりません。おそらくiPad5、x第4世代iPadがiPad4、xであると仮定します。

編集:これまでのところ、iPad miniはiPad2,5(はい、2コンマ5)とiPad2,6およびiPad2,7をマシン名として返すという報告を見てきました。

56
rmaddy

アプリは正常に動作します。ただし、非常に小さなUI要素がある場合。画面サイズが縮小されているため、それらを再検討することをお勧めします。

60

IPad Miniと非網膜iPadが同じ画面サイズになる場合、デバイス画面がiPhone 5であるかiPhone 4であるかを判断するために使用されるものを使用することはできませんか?

#define IS_WIDESCREEN5 ( [ [ UIScreen mainScreen ] bounds ].size.height == 568 )
#define IS_WIDESCREEN4 ( [ [ UIScreen mainScreen ] bounds ].size.height == 480 )

IPad Miniおよび非網膜iPadの場合:

#define IS_PAD ( [ [ UIScreen mainScreen ] bounds ].size.height == 512 )

網膜のiPadの場合:

#define IS_RETINA_PAD ( [ [ UIScreen mainScreen ] bounds ].size.height == 1024 )

これにより、2つのタイプの画面が区別され、スケール目的で正確なモデルを特定する必要がなくなります。別の方法は自動レイアウトを使用することですが、それを使用せずに制御する方が良い感じがします。

これが質問の2番目の部分に役立つことを願っています。がんばろう :)

7
johnnelm9r

IPad 2解像度用のアプリを作成します。新しいiPad Miniは、解像度が1024x768の非網膜です。つまり、iPad 1またはiPad 2で既に動作していたアプリは、iPad Miniで自動的に動作します。

7

Phil Schiller(Appleの上級副社長)は プレスイベント iPad Miniの発表(基調講演で約53:00)

選択する画面サイズとその理由そして、チームはこれについて本当に一生懸命考えました。開発者が作業をしなくても、iPad用に作成されたすばらしいソフトウェアをすべて実行できるiPadが必要です...

彼はそれから言い続けます:

...ピクセルはまったく同じであるため、覚えやすくなっています。オリジナルのiPadとiPad 2は1024 x 768、新しいiPad Miniは1024 x 768です。つまり、iPad用に作成されたソフトウェアはすべてiPad Miniで変更なしで動作します。

だから、要約すると、あなたの質問に答えるために、iPad MiniにはRetinaディスプレイがなく、追加の作業をする必要はありません。 iPad Miniは、iPad用に既に作成したストーリーボードまたはxibを利用します。

その後、検出に関する限り、これを証明するものはまだ見つかりません(まだリリースされていないため)が、次のものが "iPad Mini"を出力することを望んでいます。

NSLog(@"%@",[[UIDevice currentDevice] model]);

編集:

NSLog(@"\nMachine ID: %@\nModel: %@\nLocalized Model: %@",machineName(),[[UIDevice currentDevice] model],[[UIDevice currentDevice] localizedModel]);

NSString *machineName()
{

    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString:systemInfo.machine
                              encoding:NSUTF8StringEncoding];
}

16GB iPad Mini(Wifiのみ)では、これが返されます:

マシンID:iPad2,5
モデル:iPad
ローカライズモデル:iPad

7
Mick MacCallum

別のことをする必要はありません。 Appleが述べたように自動的に動作するはずです。解像度はまだiPadと同じです。

4
iDev

iPad miniは非網膜iPadと同じ解像度を使用し、iOSは1xグラフィックを使用します。このリンクを参照してください... link

4
Sanjeev sharma

IPad miniの画像はiPad 1と2で同じになりますが、網膜画面にも@ 2x画像を使用することをお勧めします。なぜなら、アプリがApp Storeに掲載されると、ユーザーがRetinaディスプレイを搭載したiPadにダウンロードするのを止めることができないからです。

この時点で、網膜と非網膜の両方の画像を作成する必要があります。

プログラム上、iPadのRetinaディスプレイには個別のxibファイルは必要ありません。すべての画像アセットに対しても[email protected]を保持するだけです。

3
CalZone

IPad Mini(任意のモデル)を検出するには、このコードを使用しています(iOS 10.xでテスト済み):

- (BOOL)isIPadMini {
   return [[UIDevice currentDevice].name hasPrefix:@"iPad Mini"];
}
0
Slyv