2012-02-20 17 views
3

テスト用ではない/網膜ディスプレイ私は100x100のサイズのUIViewを作成しました。私は2枚の画像を作成しましたiOS Retina display:images double size

: - - 通常サイズ(100×100) 私は2つの状況持って網膜サイズ(200×200)

を:背景 2で 1)非網膜ディスプレイ+ノーマルサイズの画像を)網膜ディスプレイ+網膜サイズ画像を背景に

第1のシナリオはOKです。 第2のシナリオでは画像は2倍のサイズで、私のUIViewでは全画像の1/4しか見ることができません。

if (IS_RETINA()) { 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND_RETINA] forBarMetrics:UIBarMetricsDefault]; 
} 
else { 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault]; 
} 

答えて

36

これを行うにははるかに簡単な方法があります:私は、次のように私のUIViewControllerのナビゲーションバーに背景画像を割り当てるしようとすると、

同じことが起こります。画像の網膜版に網膜以外の版と同じ名前を付けます。ただし、最後に「@ 2x」が付いています。たとえば、通常の画像の名前がfoo.pngの場合、網膜のバージョンは[email protected]とする必要があります。

次に、通常のバージョンのファイル名(例:foo.png)を常に参照してください。あなたのアプリが非網膜ハードウェアで実行されているときは、通常の画像が使用されますが、網膜ハードウェアを使用しているときは常に、高解像度の画像が自動的に使用されます。使用しているすべてのイメージに対してifステートメントを書く必要がありますが、実際には動作します。

+1

あなたはタイプミスをしました、[email protected]。 – coverback

+0

良いキャッチ、ありがとう。 – yuji

+1

明確にするために、OPの問題は、彼の「網膜」画像がまだ「1」のスケールで作成されているため、ぼやけてしまい、左上象限のみを表示することです。 –

2

IS_RETINAテストをコードする必要はありません。網膜ディスプレイに使用する画像を含むファイルの名前に@ 2xサフィックスを追加するだけで、iOSは自動的に優先的に使用します。

バンドル2つの画像ファイル、prettyNavBarBackground.pngと[email protected]

#define IMG_NAVIGATION_BAR_BACKGROUND prettyNavBarBackground 

次に、あなただけのこの単一の呼び出しを使用することができ、およびiOSのは、適切なオプション

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:IMG_NAVIGATION_BAR_BACKGROUND] forBarMetrics:UIBarMetricsDefault]; 
+0

@ 2xオートマトンは、コードでも、またはIBで画像を割り当てるときにのみ動作しますか? – Bagbyte

+0

@ user915829:コードもあります。試してみてください。プロジェクトには、foo.pngと[email protected]のすべてのバリエーションを含める必要があります。しかし、コードではfoo.pngのみを参照します。他のすべては自動的に発生します。 –

+0

イエス、コードまたはIB - 各画像について、iOSは最高のものを使用します。 – Snips

0

Uドンを選択します網膜と通常のハードウェアを区別するためのコードを書く必要がありません。 Uは "@ 2x"画像を追加するだけです。これは完璧に動作します。

Uこれらの画像を個別に呼び出す必要はなく、ファイル名を書き込むだけです。