1
- (UIImage*)thumbnailImage:(NSString*)fileName
{
   UIImage *thumbnail = [thumbnailCache objectForKey:fileName];

   if (nil == thumbnail)
   {
      NSString *thumbnailFile = [NSString stringWithFormat:@"%@/thumbnails/%@.jpg", [[NSBundle mainBundle] resourcePath], fileName];
      thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];
      [thumbnailCache setObject:thumbnail forKey:fileName];
   }
   return thumbnail;
}

このコードはhttp://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/から入手しました。誰かがこのコードの使い方を教えてもらえますか?imageNamedの代わりにこれを使用する方法について少し助けが必要です。

4

3 に答える 3

3
NSMutableDictionary *thumbnailCache=[[NSMutableDictionary alloc]init];

次に、「サムネイル」フォルダーをリソースフォルダーに追加し、そこにpngを配置します

- (UIImage*)thumbnailImage:(NSString*)fileName
{
   UIImage *thumbnail = [thumbnailCache objectForKey:fileName];

   if (nil == thumbnail)
   {
      NSString *thumbnailFile = [NSString stringWithFormat:@"%@/thumbnails/%@.jpg", [[NSBundle mainBundle] resourcePath], fileName];
      thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];
      [thumbnailCache setObject:thumbnail forKey:fileName];
   }
   return thumbnail;
}

foo.png をリソース フォルダに追加 // ここで UIImageView オブジェクトを作成してから

UIImageviewObject.image=[self thumbnailImage:@"foo.png"];
于 2011-07-08T10:49:08.300 に答える
1

thumbnailCacheヘッダー ファイルで宣言されている NSMutableDictionary であり、.minitメソッドまたは同等のメソッドで初期化する必要があります。

リソースに画像がある場合(jpg形式の場合、コードで.jpgを.pngに変更します)、行は次のようになります

  NSString *thumbnailFile = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], fileName];

使用する代わりに

UIImage *thumbImage = [UIImage imageNamed:@"thumb.png"];

UIImage *thumbImage = [self thumbnailImage:@"thumb.png"];
于 2011-07-08T10:57:14.607 に答える
1

コードは を使用しNSMutableDictionary *thumbnailCacheて UIImage インスタンスをキャッシュします。thumbnailsこのコードは、アプリ バンドル内に、イメージの縮小バージョンを含むディレクトリがあることを前提としています。

このメソッドは、最初にthumbnailCache、指定された画像のサムネイル (フル パスのないファイル名のみ、たとえばmyimage.png) かどうかを辞書で調べます。ディクショナリにまだ画像が含まれていない場合、画像はthumbnailsディレクトリからロードされます (作成者は後者が問題を引き起こすと主張しているため、imageWithContentsOfFile:代わりに を使用しますimageNamed:)。読み込まれた画像はディクショナリに保存されるため、次にアプリがサムネイルを要求したときに、既に読み込まれているインスタンスを使用できます。

このコードをアプリで正しく機能させるにはthumbnails、プロジェクトにフォルダーを追加する必要があります。プロジェクトに追加するときは、デフォルトの「追加されたフォルダーのグループを作成する」ではなく、必ず「追加されたフォルダーのフォルダー参照を作成する」を選択してください。そうしないと、すべてのファイルが同じ最上位フォルダーに配置されます。

しかし要点は、著者が次のように主張していることです。

  • 避けてください[UIImage imageNamed:]
  • 代わりに、NSMutableDictionary.
  • 辞書で画像を調べます。
    • 見つかった場合は、それを使用します。
    • 見つからない場合は、イメージ[UIImage imageWithContentsOfFile:]を手動でロードしてディクショナリに保存するために使用してイメージをロードします。
于 2011-07-08T10:49:46.297 に答える