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"];