0

次のように、iPhone 用アプリで Retina スクリーンと通常のスクリーンを区別する必要があります。

#if TARGET_OS_IPHONE_VERSION < 3

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"close.png"];
UIImage *image = [UIImage imageWithContentsOfFile: uniquePath];

#endif

#if TARGET_OS_IPHONE_VERSION >= 4

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"close@2X.png"];
UIImage *image = [UIImage imageWithContentsOfFile: uniquePath];

#endif

何か案が?

4

4 に答える 4

0

プリプロセッサではできません。独自のシンボルを定義することもできますが、その場合はどうするかわかりません。どういうわけか、Appleにアプリのさまざまなバージョンがさまざまなデバイスで動作したことを伝えますか?

実行時に実行することをお勧めします。UIScreen scaleプロパティを見てください。

もちろん、他の答えが言うように、通常はこれを行う必要はありません。ほとんどのUIKit関数は@2xを追加します。あなたが知る必要があるいくつかのコーナーケースがあります、それはscaleプロパティが作用するときです。

于 2011-12-07T16:25:19.293 に答える
0

プリプロセッサディレクティブはコンパイル時に解決されます。あなたの例では、これは、コンパイラがiphoneで実行されているときにこれらのコードのブロックを決定せず、アプリケーションをビルドするときに決定することを意味します。したがって、プラットフォームごとに異なるアプリケーションを構築する場合を除いて、実行時にこれを決定する必要があります。

実行しているiOS/iPhoneのバージョンを取得する方法があると確信しています。アプリを初期化するとき、またはこのコードが必要なときはいつでもそれを行い、if/elseがある場合はそれを使用します。

于 2011-12-07T16:26:22.760 に答える
0

いいえ、ありません。UIImage ではなく、それを行います。

于 2011-12-07T16:23:39.310 に答える
0

これは必要ありません。まず第一に、プリプロセッサはコンパイル時に定義されるため、Retina スクリーンを定義するのに役立ちません。とにかく、Apple の慣習により、必要ありません。プロジェクトに「close.png」を入れるだけで十分です

NSString *uniquePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"close.png"];
UIImage *image = [UIImage imageWithContentsOfFile: uniquePath];

私はあなたがこれを望んでいると思います

UIImage *image = [UIImage imageNamed:@"close.png"];

ビルド時にプロジェクトに close.png (および 2 倍のサイズの close@2x.png) がある場合は、2 番目のサンプルを使用します。テストすると、Retina フォンが @2x ファイルを表示することがわかります

于 2011-12-07T16:38:42.180 に答える