Создание динамических пользовательских быстрых действий на главном экране для ваших приложений iOS с помощью SwiftUI

Предоставьте пользователям быстрый доступ к некоторым основным функциям вашего приложения.

После обновления iOS 13 вы, вероятно, заметили, что если вы долго нажимаете значок приложения с небольшим дополнительным давлением на вашем iPhone с помощью функции 3D Touch, появится меню, показывающее вам некоторые быстрые действия (также известные как. , ярлыки) для приложения. Чтобы сделать ваше приложение более интересным, вы можете создавать собственные настраиваемые быстрые действия в своих приложениях.

Еще одна вещь, о которой следует упомянуть в начале, заключается в том, что если вы используете раскадровку для своего пользовательского интерфейса, существует хорошая официальная ссылка для реализации быстрых действий на главном экране. Однако, насколько мне известно, не было официального справочника по реализации с использованием SwiftUI, который имеет разные методы делегирования с точки зрения управления быстрыми действиями. Поэтому я надеюсь, что это руководство предоставит некоторую полезную информацию тем, кто хочет использовать SwiftUI в своих проектах.

Здесь я покажу вам, как это реализовать, с помощью пошагового руководства.

Шаг 1. Настройка проекта

Для простоты данного руководства мы просто создадим проект приложения для единого просмотра в Xcode (Файл - ›Новый -› Проект - ›Приложение для единого просмотра на вкладке iOS). В этом проекте будет использоваться Swift в качестве языка программирования и SwiftUI для разработки пользовательского интерфейса.

Шаг 2. Создание настраиваемых быстрых действий

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

  1. Быстрые действия могут быть статическими и динамическими, причем первые настраиваются во время сборки, а вторые - во время выполнения. Однако динамические элементы будут добавлены к статическим, если вы попытаетесь установить оба.
  2. Теоретически вы можете установить сколько угодно быстрых действий. Однако система будет отображать элементы только на доступном пространстве. Насколько я могу судить, можно отобразить не более четырех элементов.
  3. Быстрое действие может иметь значок, заголовок и подзаголовок. Заголовок является обязательной настройкой, а два других свойства - необязательными.
  4. За сценой должно быть инициировано определенное действие при касании элемента. Таким образом, необходимо установить тип быстрого действия, чтобы приложение могло знать, как реагировать на нажатие. Чтобы дополнительно настроить это действие, вы можете дополнительно настроить словарь для передачи дополнительной информации о пользователе.

Далее я покажу вам два общих подхода к реализации быстрых действий.

Вариант 1. Статические быстрые действия

Если ваше приложение имеет фиксированный список быстрых действий, вы можете сделать их статическими, реализовав их во время сборки. Для этого вам просто нужно создать список элементов в Info.plist файле приложения. Щелкните правой кнопкой мыши файл Info.plist и откройте его как исходный код. Добавьте в список следующий код. По сути, быстрые действия представляют собой массив словарей, в каждом из которых указан один элемент.

В приведенном выше коде мы создаем только один элемент. Если вы хотите добавить больше элементов, вы создаете больше словарей, обращаясь к коду между тегами dict и помещая дополнительные элементы в теги array.

В частности, мы устанавливаем четыре свойства элемента: тип, тип значка, заголовок и подзаголовок, используя четыре ключа соответственно: UIApplicationShortcutItemType, UIApplicationShortcutItemIconType, UIApplicationShortcutItemTitle и UIApplicationShortcutItemSubtitle. Обязательными свойствами являются только тип и заголовок. Обратите внимание, что тип должен быть уникальной строкой, чтобы ваше приложение было понятно с выбранным пользователем предполагаемым быстрым действием.

Кроме того, мы можем дополнительно указать файл изображения либо из пакета приложения, либо из каталога ресурсов, чтобы отображать значок с помощью клавиши UIApplicationShortcutItemIconFile. Изображение должно быть одноцветным и иметь размер 35 x 35.

Хотя он не используется слишком часто, вы также можете при желании установить дополнительную информацию о пользователе с помощью ключа UIApplicationShortcutItemUserInfo, который представляет собой словарь, дающий вам много места для ввода информации, относящейся к взаимодействию с пользователем. Одним из примеров использования этого ключа в официальной документации является предоставление номера версии приложения. Например, пользователь мог установить обновление вашего приложения, но оно еще не запущено. Когда пользователь нажимает на быстрые действия вашего приложения, приложение может знать, что пользователь переходит к предыдущей версии, поэтому может быть обеспечено соответствующее взаимодействие с пользователем.

<key>UIApplicationShortcutItemUserInfo</key>
<dict>
    <key>key1</key>
    <string>value1</string>
</dict>

Вариант 2. Динамические быстрые действия

Вы также можете создавать динамические быстрые действия для своего приложения во время выполнения. Хотя разработчик сам решает, где они могут создавать свои быстрые динамические действия, официальная документация Apple неявно рекомендует создавать динамические быстрые действия в методе applicationWillResignActive(_:) делегата приложения. Аналогично, с использованием инфраструктуры SwiftUI, мы собираемся установить динамические элементы в sceneWillResignActive(_:) методе делегата сцены (то есть в SceneDelegate.swift файле).

Чтобы получить и настроить быстрые действия, воспользуйтесь свойством приложения shortcutItems, вызвав: UIApplication.shared.shortcutItems. Обратите внимание, что это свойство не будет включать статические, которые вы установили в файле Info.plist. Поэтому перед установкой этого свойства это свойство равно nil.

В частности, если для вашего приложения нет быстрых динамических действий, вам просто нужно присвоить свойству shortcutItems массив UIApplicationShortcutItem.

Однако, если были заданы некоторые динамические быстрые действия, вы можете получить к ним доступ напрямую, вызвав свойство shortcutItems. Чтобы обновить конкретный элемент, вы можете создать изменяемую копию элемента, которая является экземпляром класса UIMutableApplicationShortcutItem. С помощью этого изменяемого элемента вы можете обновить заголовок, подзаголовок или значок. В качестве альтернативы вы можете напрямую создать новый элемент и заменить его элементом, который вы хотите поменять местами в исходном массиве.

Для динамических быстрых действий вы также можете установить их на nil, поскольку они не являются обязательными.

Шаг 3. Реализуйте действия пользователя

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

Сценарий 1. Приложение не загружено.

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

Сценарий 2. Приложение загружено.

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

Выводы

Я надеюсь, что это руководство поможет вам реализовать быстрые действия на главном экране для ваших проектов iOS с помощью SwiftUI. В частности, Apple предоставила нам большую гибкость в реализации динамических быстрых действий. Например, в зависимости от статуса входа пользователя мы можем предоставить быстрый доступ к различным функциям. Таким образом, вы можете воспользоваться этой гибкостью, чтобы сделать свое приложение более интересным.

использованная литература