17

UITabBar の画像を作成しています。サイズは 60x60 で作成しています。これは、Retina スクリーンが使用するサイズだからです。しかし、そのサイズを使用すると、バーに大きく表示されるため、画像の一部しか表示されません。30x30 に縮小すると機能しますが、そのサイズは Retina 以外のディスプレイ用であると想定されています。60x60 を使用すると正しく表示されないのはなぜですか?

4

2 に答える 2

6

iOS が標準解像度の画像を探していたときに、高解像度の画像を提供していたため、この動作が発生していました。

iOS は、アクセスしているデバイスの解像度に応じて、適切な画像サイズを自動的に選択します。そのため、Retina 以外のデバイスの場合は「標準解像度」の画像を、Retina ディスプレイの場合は「高解像度」の画像を提供する必要があります。iOS でこれを行う方法は、次のように、ファイル名の末尾のファイル拡張子の前に「@2x」を追加することです。

my-image.png     // for non-retina displays (Ex: 30x30 dpi)
my-image@2x.png  // for retina displays (Ex: 60x60 dpi)
my-image@3x.png  // for retina displays(plus editions) (Ex: 90x90 dpi)

次に、XCode プロジェクトでファイルを参照する場合、ファイル名を標準の解像度 (たとえば、「my-image.png」) に指定するだけで済みます。アクセスするデバイスに Retina ディスプレイがある場合、XCode は自動的に「@2x」サフィックスが付いたファイルを作成してください。これは、デバイスに Retina ディスプレイがあるかどうか、どの画像を提供する必要があるかを開発者が検出する必要がなくなるため、非常に便利です。

コード例を次に示します。

// Select an image named "my-image.png"
UIImage *img = [UIImage imageNamed:@"my-image.png"];

// If the device this code is run on is a retina device,
// then Xcode will automatically search for "my-image@2x.png" and "my-image@3x.png"
// otherwise, it will use "my-image.png"

この件について詳しくは、Apple Developer's Site: Optimizing for High Resolution を参照してください。

于 2014-09-01T12:33:04.290 に答える