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

Как указать пользовательский значок для статического объекта UIApplicationShortcutItem в моем приложении iOS 9?

В настоящее время я выполняю быстрые действия для моего приложения iOS 9 с помощью 3D Touch. У меня есть несколько действий с использованием существующих значков системы из определенного перечисления UIApplicationShortcutIconType.

Пример:

<dict>
    <key>UIApplicationShortcutItemIconType</key>
    <string>UIApplicationShortcutIconTypeSearch</string>
    <key>UIApplicationShortcutItemTitle</key>
    <string>Search for Parking</string>
    <key>UIApplicationShortcutItemType</key>
    <string>SEARCH</string>
</dict>

Однако для одного из действий я хочу использовать пользовательский значок. Я попытался заменить строку UIApplicationShortcutItemIconType именем моего объекта изображения, но это не работает.

Это достаточно просто сделать для динамических действий с использованием UIApplicationShortcutIcon.iconWithTemplateImageName(), но это действие должно быть статическим.

4b9b3361

Ответ 1

Вместо использования ключа UIApplicationShortcutItemIconType замените его ключом UIApplicationShortcutItemIconFile, а затем укажите имя вашего файла изображения или ImageAsset.

Вот так:

<dict>
    <key>UIApplicationShortcutItemIconFile</key>
    <string>MyCustomImageName</string>
</dict>

Остальные ключи могут оставаться такими, как они были.

Ответ 2

Используйте UIApplicationShortcutItemIconFile как ключ и имя вашего файла изображения (с расширением или без него) в качестве строки. Например: используя изображение с именем "lightning.png", вы должны добавить следующее в Info.plist...

<key>UIApplicationShortcutItems</key>
<array>
    <dict>
        <key>UIApplicationShortcutItemIconFile</key>
        <string>lightning</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Search for Parking</string>
        <key>UIApplicationShortcutItemType</key>
        <string>SEARCH</string>
    </dict>
</array>

Изображение может быть сохранено либо в дереве проекта, либо в Assets.xcassets. Если вы сохраняете изображение в Assets.xcassets, используйте имя набора изображений, если вы назвали набор чем-то отличным от вашего имени файла.

Ваш файл изображения должен быть PNG (если вы хотите прозрачность), квадратный, одиночный цвет и 35x35 пикселей. Многоцветные изображения по существу получают черное наложение.

Здесь тестовое изображение, которое соответствует вышеуказанным критериям:

lightning.png с прозрачным фоном 35x35px

Просто сохраните это изображение как "lightning.png", перетащите его в дерево проектов и используйте приведенный выше код в файле Info.plist.

Для тех, кому не удобно редактировать Info.plist в качестве исходного кода, вот как это должно выглядеть, если вы сделаете это изначально в списке свойств:

Info.plist

Чтобы прикрепить эти ярлыки к коду, вы делаете это в AppDelegate.swift. Добавьте следующее:

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {

    if shortcutItem.type == "SEARCH" {
        print("Shortcut item tapped: SEARCH")
        // go to SEARCH view controller
    }

}

Стоит отметить, что соглашение для UIApplicationShortcutItemType не все шапки (например, "ПОИСК" ), а скорее использует ваш идентификатор пакета как предварительное исправление:

com.myapps.shortcut-demo.search