Каталоги активов в пакетах ресурсов
У меня есть отдельный набор ресурсов, которые поставляются с моей картой. Я хочу поместить и использовать каталог активов в этом пакете. Однако UIImage imageNamed: говорит, что он использует основной пакет текущих приложений. Как загрузить изображение из каталога активов в другом комплекте?
Трюк использования [bundle pathForResource: nameType: @ "png" ] не работает с компилируемым каталогом активов. Я проверил, что файл Assets.car действительно находится в комплекте и содержит мои изображения.
Ответы
Ответ 1
Начиная с iOS 8, вы можете использовать [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]
для загрузки изображений по имени из другого пакета. Например, динамическая структура может использовать свой собственный каталог активов отдельно от основного пакета приложений.
Ответ 2
Как разработчик Apple:
К сожалению, невозможно загрузить изображения из любого автомобильного файла, кроме того, который Xcode компилирует в ваш основной пакет, так как + imageNamed: не принимает параметр пакета, что и нужно для этого (и даже тогда он мог бы только открыть один каталог активов в одном комплекте).
Вот ссылка:
https://devforums.apple.com/message/968859#968859
Ответ 3
Существует трюк, с помощью которого каталоги активов работают с пакетами: установите целевое назначение развертывания ресурса в 6.1 (или ниже). Каталоги активов существуют только с 7.0, поэтому Xcode фактически не создаст файл .car
(скомпилированный каталог активов), но скопирует его в пакет напрямую, как описано здесь:
Xcode 6 предоставляет различные функциональные возможности для каталогов активов в зависимости от > цели развертывания для вашего проекта:
- Для всех проектов отдельные изображения могут быть загружены с использованием имен наборов.
- Для проектов с целью развертывания, по крайней мере, для iOS 7 или OS X 10.9, Xcode компилирует ваши каталоги активов в формат двоичного файла во время выполнения, что сокращает время загрузки вашего приложения.
Предостережение заключается в том, что любая дополнительная информация (нарезка, режим рендеринга,...) игнорируется, вы получаете только простые изображения. Хотя организация через каталоги активов может быть более удобной, я чувствую, что это может привести к некоторым труднодоступным ошибкам/путанице...
Изменить: если вы примените трюк, описанный выше, вы, скорее всего, не получите преимущества приложения, используемого в iOS 9, так как после создания приложения нет компилируемого каталога активов, но осталось только куча простых изображений, поэтому Apple не сможет автоматически выделять ресурсы. Это только предположение.