iPhone 5 がリリースされ、新しい画面サイズと解像度が追加されました。
iPhone 4 (retina) 用の画像を使用したときは、画像名に「@2x」を追加しただけです。新しいiPhone画面に別の画像(背景、ボタンなど)を追加することは可能ですか?
そして 2 番目の質問: アプリ内に別の XIB ファイルを含めることはできますか: 古い iPhone 用、新しい iPhone 用 (iPhone と iPad 用など)。
ありがとうございました!
iPhone 5 がリリースされ、新しい画面サイズと解像度が追加されました。
iPhone 4 (retina) 用の画像を使用したときは、画像名に「@2x」を追加しただけです。新しいiPhone画面に別の画像(背景、ボタンなど)を追加することは可能ですか?
そして 2 番目の質問: アプリ内に別の XIB ファイルを含めることはできますか: 古い iPhone 用、新しい iPhone 用 (iPhone と iPad 用など)。
ありがとうございました!
この件に関する私のブログからの例外は次のとおりです。
[UIImage imageNamed:] は、Retina デバイスでの実行時に @2x バージョンのイメージを自動的に読み込みます。残念ながら、imageNamed: は、iPhone 5 で実行している場合、-568h@2x バージョンのイメージを自動的にロードしません。
場合によっては、これが問題にならないこともあります。たとえば、iPhone 4 と 5 では、アイコンとフルスクリーン以外のグラフィックスはおそらく同じです。ただし、フルスクリーンの背景画像、またはツールバーなどの全幅/高さの背景画像がある場合は、問題があります。高さ 480 の画像は引き伸ばされる可能性が高くなります (その結果、恐ろしい画像になる可能性があります)。
画面サイズを手動で確認し、次のように適切な画像をロードできます。
UIImage* myImage;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
myImage = [UIImage imageNamed:@"myImage-568h.png"];
} else {
myImage = [UIImage imageNamed:@"myImage.png"];
}
UIImage imageNamed を変更して、適切な画像を自動的にロードする方法があります。詳細については、以下のリンクを参照してください。
詳細: http://pervasivecode.blogspot.co.uk/2012/09/make-apps-work-on-iphone-5-screen-size.html
編集: @Sound Blaster と @GrizzlyNetchは正しく、コードでは imageNamed:@"myImage-568h.png"] を使用する必要がありますが、実際のファイル名は myImage-568h@2x.png にする必要があります。そうしないと、彼らが言ったように、スケールが正しくありません。
iPhone 5 では新しいピクセル密度が導入されていないため、以前使用していたすべての Retina イメージをそのまま使用できます。
iPhone 5 の新しい解像度をサポートするために必要なのは、ビューをウィンドウ上に表示することだけです。tableview や scrollview などのほとんどのビューでは、これで問題は発生しません。
また、サポートされていない新しい解像度用に追加の XIB ファイルを追加する必要もありません。
Default-568h@2x.png
アプリバンドルを追加するだけで、iOS 6 でアプリが iPhone 5 で利用可能な余分なスペースを占有できるようになります。
タブ バーなどのすべてのネイティブ コントロールは、期待どおりに動作します。
アプリで iOS4.3 および 5.* をサポートする場合Use Autolayout
は、nib 設定 (インターフェイス ビルダーの最初のタブ) がオフになっていることを確認してください。
次に、ビューを正しく設定していることを確認してくださいautoresizingMask
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) 浮動小数点数の正確な比較は、メモリに格納される方法の丸め誤差のため、どの言語でも良い考えではありません。たとえば、568.0f が 567.9999999 または 568.0000001 として格納されていないことを保証することはできません。範囲を使用する方がはるかに安全です。この場合、screenHeight > 567.1f で十分です。iPhone でさえ、物理的にピクセルの一部をサポートしていないのではないかと思います。
現在、この方法で現在のデバイスが 4 インチの iPhone であるかどうかを検出しており、うまく機能しています。
- (BOOL)isiPhone5{
return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0);
}