5

Web Apple.png と Apple@2x.png から 2 つの画像をダウンロードしています。[UIImage imageNamed:@"Apple.png"]組み込み機能を使用して、Apple.png または Apple@2x.png のどちらを表示する必要があるかを検出できるように使用したいと考えています。

これらの画像をどこに保存しますか?ドキュメントで次のことを読みました。

ファイルの名前。イメージが初めて読み込まれる場合、メソッドはアプリケーションのメイン バンドルで指定された名前のイメージを探します。

ああ、アプリケーションのメイン バンドルが最適です。これは私のコードがどのように見えるかです:

NSString      *directory   = [[NSBundle mainBundle] bundlePath]; 
NSString      *path        = [directory stringByAppendingPathComponent:imageName];
NSFileManager *fileManager = [NSFileManager defaultManager];

[fileManager createFileAtPath:path contents:dataFetcher.receivedData attributes:nil];

パスのフォルダーにファイルが作成されているかどうかを確認しましたが、それは正しいものでした。また、プロジェクト ファイルに Example.png をドラッグして、同じフォルダーに保存されているかどうかを確認しましたが、これも正しいものでした。

ただし、[UIImage imageNamed:@"Apple.png"]はまだ画像を取得できません。

4

6 に答える 6

2

アプリでダウンロードした画像UIImageでの方法はご利用いただけません。+imageNamed:このメソッドは実際にアプリ バンドル内の画像を探しますが、アプリは実行時に独自のバンドルを変更することはできません。

于 2011-01-21T01:34:01.683 に答える
1

アプリのローカル ストア (つまり、サンドボックス) にイメージを (もちろん非同期で) ダウンロードし、ローカルで参照します。NSDocumentDirectoryその後、 orを使用NSCachesDirectoryして、その場所への参照を常に取得できます。

于 2011-01-21T01:35:02.903 に答える
0

実行時にバンドルを変更することはできません。imageNamedまた、バンドルリソース参照を含むアプリ内で初期化されたリソースマップのようなものを使用していると思います。

代わりにこれを試してください:http: //atastypixel.com/blog/uiimage-resolution-independence-and-the-iphone-4s-retina-display/

チャオ!

于 2011-01-21T01:46:09.533 に答える
0

最善の解決策は、Library フォルダーに独自のバンドルを作成することだと思いますimages.bundle。そこで、両方の解像度の画像を保存できます。その画像にアクセスするには、NSBundle クラスの pathForResource:ofType: メソッドを使用できます。適切な画像を返します。パスが返された初期化イメージよりも。

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;
NSURL *libraryURL = [fileManager URLForDirectory:NSLibraryDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error];
if (libraryURL == nil) {
    ALog(@"Could not access Library directory\n%@", [error localizedDescription]);
} else {
    NSURL *folderURL = [libraryURL URLByAppendingPathComponent:@"images.bundle"];
    DLog(@"Future bundle url = %@",folderURL);
    if (![fileManager createDirectoryAtURL:folderURL withIntermediateDirectories:YES attributes:nil error:&error]) {
        ALog(@"Could not create directory %@\n%@", [folderURL path], [error localizedDescription]);
    } else{
        NSBundle *bundle = [NSBundle bundleWithURL:folderURL];
        // put image and image@2x to the bundle;
        [bundle pathForResource:yourImageName ofType:@"png"];
    }
}
于 2012-09-18T19:09:15.573 に答える
0

アクセスするための適切な権限でファイルが作成されていますか? ファイルを保存した後、必ずファイルを閉じましたか?

于 2011-01-21T01:33:25.383 に答える