Подтвердить что ты не робот

Ресурсы изображений для iOS

Мне, вероятно, не хватает чего-то очевидного здесь, но я не смог решить следующую проблему:

У меня есть проект с ресурсами изображения как для обычных, так и для сетчатых экранов, например 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"];

в этом случае возвращается возвращенный путь образа, но он работает только, если я использую imageWithContentsOfFile вместо imageNamed, и он не принимает соответствующий ресурс: он загружает ресурс для сетчатки, несмотря на тип экрана.

Если я омпит filetype (как и раньше, добавляя ресурсы @2x, и он работал нормально, и это было первое, что я пробовал, и был уверен, что это сработает)

imageName = [NSString stringWithFormat: @"%@/%@",
                                  @"MyResourcesBundle.bundle"",
                                  @"someimage" ];

ничего не загружается.

Добавление расширения .tiff имеет тот же эффект, что и pathForResource: - загружается ресурс для сетчатки, без учета ресурса для экрана без сетчатки.

Так что мне не хватает? Каков правильный способ загрузки изображений?

4b9b3361

Ответ 1

Вы пытались просто загрузить изображение, используя:

UIImage * someImage = [UIImage imageNamed: @"someimage"];

(если у вас есть изображение с именем "someimage" в проекте, например someimage.png)

Код будет автоматически выбирать версии сетчатки/не-сетчатки в зависимости от платформы.

Если проблема в том, что TIFF создан, проверьте:

XCode Combine high-resolution artwork

В последней версии XCode перейдите в меню "Редактор", затем выберите "Validate settings", который должен удалить эту комбинацию.

Ответ 2

Многостраничные TIFF предназначены только для OSX; они не работают на iOS.

Поэтому вам нужно перестать пытаться получить доступ к ресурсам, которые по своей природе недоступны и делают все правильно!

Вам нужно открыть проект, который создает набор внешних ресурсов, выбрать цель, перейти в "Настройки сборки", а затем подзаголовок "Развертывание" и установить "Объединить изображения с высоким разрешением" на "Нет". Затем перекомпилируйте пакет внешних ресурсов.

В вашем основном проекте вы теперь сможете читать в PNG обычным способом.

Ответ 3

Если вы работаете с пакетами, а не переходите к

- > установить параметры → COMBINE_HIDPI_IMAGES в НЕТ,

и вам просто нужно очистить и построить!

Ответ 4

Когда вы создаете изображения для своего приложения, скажем, вы создаете образ под названием example.

Вы должны сохранить следующее:

  • example ~ iphone.png → это для не сетчатки iPhone
  • [email protected] → это для сетчатки iPhone
  • example ~ ipad.png → это для не сетчатки iPad
  • [email protected] → это для сетчатки iPad

Итак, не имеет значения, откуда вы это называете, вы просто называете это так, предполагая, что myImageView является объектом UIImageView:

[myImageView setImage:[UIImage imageNamed:@"example"]];

Apple настоятельно рекомендует использовать png-изображения. Кроме того, ОС заботится о поиске правильного изображения для желаемого устройства. Вам не нужно беспокоиться о том, как найти путь и все такое. +(UIImage*)imageNamed:(NSString*)name ищет правильное изображение в вашем ресурсном пакете - и, кстати, чтобы вернуть пакет с вашими ресурсами, просто позвоните [NSBundle mainBundle];

Ответ 5

- > установить параметры → COMBINE_HIDPI_IMAGES в NO

это единственное решение, которое работает, и никаких других изменений не требуется