Программный доступ к каталогу активов

96

Я знаю, что это новая функция, и это может быть невозможно, но я хотел бы иметь возможность использовать каталог активов для организации своих ресурсов, но я получаю доступ ко всем своим изображениям программно. Как мне теперь получить доступ к своим изображениям? Могу ли я получить к ним доступ по таким именам файлов:

[UIImage imageNamed:@"my-asset-name.png"];

Похоже, что в каталоге активов нет ссылки на расширение, так что было бы эффективнее получить к нему доступ без ".png"?

Причина, по которой я прошу вместо тестирования для себя, заключается в том, что даже после удаления моих активов и каталога активов, а затем очистки папки сборки я все еще могу получить доступ к своим активам в моем приложении. Это мешает мне протестировать Каталог активов, когда я его внедряю.

Просмотрев Каталог активов, я нашел «Contents.json» для каждого актива, и он был отформатирован следующим образом:

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "my-asset@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

Я все еще не знаю, как мне получить к нему доступ, но, может быть, это поможет?

Райли
источник

Ответы:

138

Чтобы получить доступ к изображению из каталога активов, вам нужно только получить доступ к имени группы активов без каких-либо расширений.

Итак, если вы добавите изображение с именем @"my-button@2x.png"в каталог активов, оно создаст группу активов с именем my-button.

Теперь все, что вам нужно сделать, это получить доступ к изображению следующим образом:

// Objective-C
[UIImage imageNamed:@"my-button"];
// Swift
UIImage(named: "my-button")

Кроме того, вы можете редактировать группу активов, переименовав ее (без переименования изображений) или изменив ее отдельные компоненты. Это позволит вам следовать более простым соглашениям об именах, а также показывать совершенно разные активы между разнымиUIScreen scale s без каких-либоscale проверок.

Чтобы включить изображения для устройств разного размера, вам может потребоваться переключить его в подзаголовке «Устройства» в параметрах группы каталога активов. Вот пример этого переключателя (доступен при щелчке правой кнопкой мыши по группе).

Райли
источник
Версии R4, то есть поддержка 568, есть. Если вы просматриваете атрибуты набора изображений, вы можете выбрать «Определенное устройство» в раскрывающемся
списке
Есть ли способ программно получить доступ к информации о срезах? Помимо получения свойства capInsets от объекта UIImage?
Клаас
@Klaas Я не уверен, зачем вам это нужно получать любым другим способом, кроме UIImage. И из того, что я видел, нет, поскольку каждое изображение категории в группе может быть совершенно другим изображением, поэтому не будет доступной общей информации, такой как нарезка. Или я что-то упускаю?
RileyE
@RileyE Мне нужно выполнить некоторые вычисления для пользовательского представления наложения и я хотел бы использовать те же вставки. Когда мне нужно только создать UIImage для моих вычислений, я бы предпочел сохранить необходимое значение в другом месте (и избыточном).
Клаас
1
Код Swift, похоже, изменен наUIImage(named: imageName)
HKTonyLee
26

Также Apple добавила новый способ получения изображения из ресурсов в Swift 3, он называется «Image Literal» и работает следующим образом:

Изображение Literal

Йигит Йилмаз
источник
5

Swift

Вы можете получить ссылку на изображение в каталоге ресурсов с помощью

UIImage(named: "myImageName")

Вам не нужно включать расширение.

Suragch
источник
1

@RileyE прав на 100%. Однако, исходя из моего опыта, также стоит отметить, что иногда ссылка на каталог ресурсов для изображения может содержать конечные пробелы. Вы, вероятно, не заметите, если используете раскадровки / xibs, поскольку автозаполнение добавит их. Но когда вы ссылаетесь на это из кода, не так очевидно, в чем проблема.

AppHandwerker
источник