imageNamed is evil - Как использовать функцию

- (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.

3 ответа

Решение
NSMutableDictionary *thumbnailCache=[[NSMutableDictionary alloc]init];

затем добавьте папку "thumbnails" в вашу папку ресурсов, затем поместите туда 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"];

Код использует NSMutableDictionary *thumbnailCache кэшировать экземпляры UIImage. Код предполагает, что в комплекте приложений есть каталог thumbnails с уменьшенными версиями их изображений.

Метод теперь сначала выглядит в thumbnailCache словарь, является ли миниатюра для данного изображения (которое является только именем файла без полного пути, например myimage.png). Если в словаре уже не было изображения, оно загружается из thumbnails каталог (используя imageWithContentsOfFile: вместо imageNamed:, так как авторы утверждают, что позднее вызывает проблемы). Загруженное изображение затем сохраняется в словаре, поэтому в следующий раз, когда приложение запрашивает миниатюру, оно может использовать уже загруженный экземпляр.

Чтобы этот код работал правильно в вашем приложении, необходимо добавить thumbnails папка для вашего проекта. Когда вы добавляете его в свой проект, обязательно выберите "Создать ссылки на папки для любых добавленных папок" вместо значения по умолчанию "Создать группы для любых добавленных папок". Только тогда вы получите подкаталог в основном комплекте вашего приложения, в противном случае все файлы будут помещены в одну папку верхнего уровня.

Но дело в том, что автор утверждает:

  • избежать [UIImage imageNamed:],
  • Вместо этого есть NSMutableDictionary,
  • Посмотрите изображения в словаре.
    • Если найдено, используйте это.
    • Если не найдено, загрузите изображение, используя [UIImage imageWithContentsOfFile:] вручную загрузить изображение и сохранить его в словаре.

thumbnailCache NSMutableDictionary объявлен в заголовочном файле, и он должен быть инициализирован в.m init метод или эквивалентный метод.

Если у вас есть изображения в ресурсах (с форматом jpg, иначе измените.jpg на.png в коде), тогда строка должна выглядеть так:

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

Вместо того, чтобы использовать

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

UIImage *thumbImage = [self thumbnailImage:@"thumb.png"];
Другие вопросы по тегам