私はおそらくここで明白な何かを見逃しているのですが、私は次の問題を解決できませんでした:
someimage.pngや[email protected]など、通常の画面と網膜画面の両方の画像リソースを使用するプロジェクトがあり、これらは別のバンドルに保存されています。プロジェクトをビルドすると、Xcodeが自動的にそれらを単一のマルチページtiff(imageName.tiff
)にパックします。Finderで確認しました。実際には、両方の画像が含まれているマルチページtiffです。ただし、ここで問題が発生します。適切なリソースをロードするのに苦労しています。
私がしていることは:
NSString * imageName = ... ;
NSLog(@"imageName: %@", imageName);
UIImage * someImage = [UIImage imageNamed: imageName];
また、リソースとのバンドルを返す補助メソッドも気に入っています。
+(NSBundle *) resourcesBundle
{
NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"MyResourcesBundle" withExtension:@"bundle"]];
return bundle;
}
imageName
をフォローしてみました:
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"png"];
この場合、null
にimageName
を使用します。
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"tiff"];
この場合、actuall画像パスが返されますが、imageWithContentsOfFile
ではなくimageNamed
を使用した場合にのみ機能し、適切なリソースを使用しません。画面のタイプに関係なく、網膜のリソースをロードします。
ファイルタイプを省略した場合(@2x
リソースを追加する前に行ったように、正常に機能し、最初に試してみて、機能することを確認した場合)
imageName = [NSString stringWithFormat: @"%@/%@",
@"MyResourcesBundle.bundle"",
@"someimage" ];
何も読み込まれません。
「.tiff」拡張子を追加すると、pathForResource:
と同じ効果が得られます。網膜以外の画面のリソースは無視され、網膜のリソースが読み込まれます。
それで私は何が欠けているのですか?画像をロードする正しい方法は何ですか?
以下を使用して画像を単にロードしようとしましたか?
UIImage * someImage = [UIImage imageNamed: @"someimage"];
(プロジェクトに「someimage」という名前のイメージがあると仮定します。たとえば、someimage.png)
コードは、プラットフォームに応じて、網膜/非網膜バージョンを自動的に選択します。
TIFFが作成されていることが問題である場合は、以下を確認してください。
XCodeの最新バージョンでは、[エディター]メニューに移動し、[設定の検証]を選択すると、そのアートワークの組み合わせが削除されます。
マルチページTIFFはOSX専用です。iOSでは機能しません。
したがって、本来その性質上、アクセスできないリソースにアクセスしようとするのをやめて、正しいことをする必要があります。
外部リソースバンドルを生成するプロジェクトを開き、ターゲットを選択し、[ビルド設定]に移動してから[展開]サブ見出しに移動し、[高解像度アートワークの結合]をいいえ。次に、外部リソースバンドルを再コンパイルします。
メインプロジェクトでは、通常の方法でPNGを読み取ることができるはずです。
バンドルを使用している場合は、
->ビルド設定-> COMBINE_HIDPI_IMAGESをNOに、
クリーンアップしてビルドするだけです!
->ビルド設定-> COMBINE_HIDPI_IMAGESをNOに
これが機能する唯一のソリューションであり、他の変更は必要ありません
アプリのイメージを作成するときに、example
というイメージを作成するとします。
以下を保存する必要があります。
したがって、myImageViewがUIImageViewオブジェクトであると想定して、どこから呼び出すかは問題ではなく、次のように呼び出すだけです。
_[myImageView setImage:[UIImage imageNamed:@"example"]];
_
Appleはpng画像を使用することを強くお勧めします。また、OSは目的のデバイスに適した正しい画像を見つけるように処理します。パスやそのすべてを見つけることについて心配する必要はありません。 +(UIImage*)imageNamed:(NSString*)name
は、リソースバンドルで正しい画像を探します-ちなみに、リソースとともにバンドルを返すには、_[NSBundle mainBundle];
_を呼び出します