Доступ до каталогу активів здійснюється програмно


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 scales без будь-яких scaleперевірок.

Для того, щоб включити зображення для різних розмірів пристроїв, можливо, вам доведеться перемкнути їх у підзаголовку «Пристрої» в параметрах групи каталогів активів. Ось приклад цього перемикача (доступний, клацнувши правою кнопкою миші групу).


Є версії R4, тобто підтримка 568. Якщо ви переглядаєте атрибути набору зображень, ви можете вибрати "Device Specific" зі спадного меню "Пристрої", а потім ви можете додати зображення R4, яке відображатиметься на 4-
дюймових

Чи є спосіб програмного доступу до інформації про нарізки? Окрім отримання властивості capInsets від об'єкта UIImage?
Клаас,

@Klaas Я не впевнений, чому вам потрібно отримати його будь-яким іншим способом, окрім UIImage. І з того, що я бачив, ні, оскільки кожне зображення категорії в групі може бути абсолютно різним зображенням, тому загальної інформації, наприклад нарізки, не буде доступно. Або мені чогось не вистачає?
RileyE

@RileyE Мені потрібно зробити декілька обчислень для власного подання накладання, і я хотів би використовувати ті самі вставки. Коли мені потрібно лише створити UIImage для моїх обчислень, я б віддав перевагу зберігати необхідне значення десь ще (і надлишковим).
Клаас,

1
Здається, код Свіфта змінено наUIImage(named: imageName)
HKTonyLee

26

Також Apple додала новий спосіб отримати зображення з активів за допомогою Swift 3, він називається як "Image Literal" і працює, як показано нижче:

Образ буквальний


5

Швидкий

Ви можете отримати посилання на зображення у вашому кателозі об’єктів

UIImage(named: "myImageName")

Вам не потрібно включати розширення.


1

@RileyE має 100% рацію. Однак, з мого досвіду, також варто зазначити, що іноді посилання на каталог активів для зображення може містити кінцеві пробіли. Ви, мабуть, не помітили б, якщо використовувати раскадровки / xibs, оскільки автозаповнення додасть їх. Але коли ви посилаєтесь на нього з коду, не так очевидно, в чому проблема.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.