Connect with us

Разработка

Добавляем Image Playground в приложение

Интеграция Apple Image Playground с SwiftUI или UIKit открывает новые возможности для создания динамических визуальных эффектов, интерактивного контента и продвинутых инструментов дизайна.

Опубликовано

/

     
     

Помимо приложения для пользователей, разработчикам Image Playground предлагает фреймворк, позволяющий интегрировать генерацию изображений в приложения, встраивая компоненты, вызывающие и представляющие интерфейс Image Playground, доступный как в UIKit, так и в SwiftUI.

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

1. Начало работы

Подключаем фичу в SwiftUI

Чтобы воспользоваться преимуществами Image Playground, независимо от того, разрабатываете ли вы в UIKit или SwiftUI, импортируйте фреймворк Image Playground.

Во-вторых, обязательно установите минимальное развертывание на 18.1 для iOS и 15.1 для macOS, чтобы избежать ошибок Xcode и иметь возможность создавать приложение только для поддерживаемых операционных систем.

Добавляем Image Playground в приложение

Как вариант, установите атрибуты, чтобы убедиться в наличии Image Playgrounds в операционной системе перед его использованием.

Обработайте в точке входа в приложение ОС устройства:

  1. Убедитесь, что версия ОС не ниже iOS 18.1 или macOS 15.1.
  2. Обеспечьте резервное представление для устройств с меньшими версиями.

Сделайте то же самое для ContentView, но теперь в отношении доступности функции Image Playground.

  1. Добавьте атрибут @available, чтобы указать компилятору доступность этой структуры в ОС.
  2. Проверьте специальную переменную окружения для обработки отображения фичи в зависимости от типа устройства, чтобы избежать включения компонентом функции на устройствах с подходящей ОС, но не поддерживающих Apple Intelligence.

Подключаем фичу в UIKit

Давайте рассмотрим, как использовать преимущества атрибутов для обработки версии ОС и доступности функций при реализации в UIKit.

Во-первых, создайте UIViewController для обработки представления, когда функция недоступна.

Во-вторых, создайте UIViewController, отвечающий за генерацию обложки истории, и установите атрибуты доступности ОС.

Теперь мы готовы обработать сцену, чтобы представить ее в соответствии с доступностью функции.

  1. Объявите переменную, в которой будет храниться контроллер представления.
  2. Используйте атрибут для проверки версии ОС и доступности функции с помощью ImagePlaygroundViewController.isAvailable.
  3. Инициализируйте все в зависимости от того, доступна функция или нет:
    • присвойте переменной экземпляр StoryCoverGeneratorViewController, если Image Playground доступен;
    • присвойте экземпляр UnavailableViewController, если она недоступна.

2. Интеграция Image Playground

Интеграция в приложение SwiftUI

Метод imagePlaygroundSheet(isPresented:concept:sourceImageURL:onCompletion:onCancellation:) позволяет представить экран, на котором пользователь создает изображения из указанных входных данных.

Она принимает несколько параметров:

  1. isPresented — ожидается значение Bool, которое включает отображение представления листа, что приводит к открытию интерфейса Image Playground;
  2. concept — строка, описывающая содержимое, в соответствии с которым будет создаваться изображение;
  3. sourceImage ожидает URL-адрес файла в зависимости от того, должен ли промпт содержать начальную визуальную подсказку или нет. После того как эта функция открыта, ее можно переопределить непосредственно из интерфейса Image Playground. Метод позволяет сделать то же самое, используя изображение вместо URL.
  4. onCompletion , замыкание без возвращаемого значения, которое получает сгенерированное изображение с данными параметрами:
    • url , URL, указывающий на временный файл изображения
    • onCancellation, замыкание для обработки отмены процесса создания изображения, когда пользователь выходит из интерфейса создания без выбора изображения. После выполнения этого замыкания система автоматически закрывает экран.

Другой метод, позволяющий описать изображение с помощью большего количества концепций, — это imagePlaygroundSheet(isPresented:concepts:sourceImageURL:onCompletion:onCancellation:), который требует объект [ImagePlaygroundConcept], коллекцию текстовых элементов, описывающих содержимое, по которым надо сгенерировать изображение.

Метод text(_:) создает концепты изображения из коротких строк, описывающих содержание изображения, которое пользователь хочет сгенерировать.

Имейте в виду, что:

  1. Метод лучше работает с отдельными словами или короткими предложениями;
  2. Если строка слишком длинная, она автоматически разбивает ее на более короткие концепции, выбирая только самые важные.

Когда речь идет о более длинных строках, следует использовать метод extracted(from:title:), который способен выбрать несколько концептов.

Этот метод возвращает объект ImagePlaygroundConcept и принимает 2 параметра:

  1. Текст, длинный объект String, из которого выбираются концепты для игровой площадки — если его длина не является минимально необходимой для модели, строка может быть использована как есть;
  2. Опциональный заголовок, короткая строка, представляющая текст в сжатом виде, что помогает модели извлекать из него основные понятия.

Теперь давайте объединим все в нашем представлении, чтобы сгенерировать возможные обложки на основе истории, предложенной пользователем.

В этом приложении пользователи могут ввести в текстовое поле рассказ длиной до 250 слов и сгенерировать изображение, соответствующее этому рассказу.

Когда пользователь нажимает кнопку Generate, приложение проверяет длину рассказа, а затем отображает интерфейс Image Playground. Условная проверка среды гарантирует, что функция доступна на поддерживаемых устройствах, а в противном случае выводит сообщение об ошибке.

Добавляем Image Playground в приложение

Интеграция в приложение UIKit

Чтобы представить интерфейс Image Playground в UIKit, используйте ImagePlaygroundViewController. Расширьте класс StoryCoverGeneratorViewController новым методом, отвечающим за представление листа Image Playground.

Метод openImagePlayground(with:), получающий сюжет в виде значения String, работает следующим образом:

  1. Инициализирует ImagePlaygroundViewController;
  2. Устанавливает свойство делегата для перехвата событий жизненного цикла;
  3. Извлекает концепции из параметра с помощью метода extracted(from:title:) и сохраняет их в свойстве conceptsproperty контроллера ImagePlaygroundViewController;
  4. Показывает ImagePlaygroundViewController.

Расширьте класс StoryCoverGeneratorViewController, чтобы он соответствовал протоколу ImagePlaygroundViewController.Delegate.

  1. Реализуйте метод imagePlaygroundViewController(_:didCreateImageAt:), возвращающий делегату URL сгенерированного изображения;
  2. Установите изображение, которое будет отображаться в пользовательском интерфейсе;
  3. Выйти из экрана Image Playground.

Интеграция в наше приложение Story Cover Generator будет выглядеть следующим образом:

  1. Создайте метод, который будет срабатывать при нажатии на кнопку «Сгенерировать».
  2. Проверьте длину вводимого сюжета.
  3. Представьте интерфейс Image Playground с помощью метода openImagePlayground(with story:).
  4. Выдавайте предупреждение об ошибке, если история длиннее, чем ожидалось.

Добавьте этот метод в качестве действия к цели кнопки Generate.

Заключение

Интеграция Apple Image Playground с SwiftUI или UIKit открывает новые возможности для создания динамических визуальных эффектов, интерактивного контента и продвинутых инструментов дизайна. Разработчики могут легко создавать визуально насыщенный опыт, сохраняя при этом бесшовную интеграцию с разными фреймворками в своих приложениях.

На данный момент возможности ограничены, так как Apple будет расширять возможности на базе Apple Intelligence в течение года. Многообещающим является тот факт, что даже если эти возможности ограничены на данный момент, в дальнейшем они будут только улучшаться.

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

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: