Преодолейте системные ограничения с помощьюSwiftUI🔗

В настоящее время существует 3 способа представления всплывающих окон. Один с UIPopoverPresentationController , но работает только на iPad. Вы также можете представить UIMenu , но это только для iOS 14+. Наконец, вы можете использовать UIAlertController. Это, вероятно, проще всего реализовать, но и больше всего ограничивает, так как он поддерживает только метки, кнопки и текстовые поля.

Итак… что, если вам нужно уведомление в приложении? Видео "картинка в картинке"? Или всплывающее окно? Здесь на помощь приходят настраиваемые всплывающие окна.

Мы будем использовать библиотеку Popovers. Полное раскрытие: я разработчик этого. Но это на 100% открытый исходный код и под лицензией MIT, поэтому не стесняйтесь использовать его по своему усмотрению.



Во-первых, вам нужно добавить библиотеку в свой проект. Popovers поддерживает диспетчер пакетов Swift — в Xcode просто перейдите в FileAdd Packages…, затем введите URL-адрес:

https://github.com/aheze/Popovers

С этого, давайте начнем!

Основные всплывающие окна🔗

Чтобы добавить простое всплывающее окно, просто используйте модификатор .popover(). Всплывающие окна основаны на SwiftUI, что означает, что вы можете передать и представить любое представление, которое хотите.

Хорошо, а что, если вместо этого вы хотите прикрепить всплывающее окно к верхней части кнопки? Это может также использовать немного интервала. Ну, это так же просто:

Круто — теперь давайте добавим анимацию и настроим резинку.

И теперь у вас есть бодрый поповер! Это только поверхностное представление о том, что вы можете сделать — вот список всех настраиваемых атрибутов. Но теперь давайте взглянем на некоторые более продвинутые функции.

Расширенные всплывающие окна🔗

Среди моих любимых функций SwiftUI — его переходы — пока структура представления одинакова, вы анимируете между явно разными представлениями. Popovers использует это преимущество с модификатором .popover(selection:), который позволяет плавно переходить между несколькими всплывающими окнами.

Хороший. Но это еще не все! Когда я начал создавать всплывающие окна, я хотел сделать их максимально настраиваемыми. Так что, если вы хотите связать всплывающее окно с базовым представлением? Просто прикрепите background и вставьте PopoverReader — что-то вроде GeometryReader, но круче.

Одна последняя вещь. Мне очень нравится внешний вид UIMenu, но они доступны только на iOS 14+. Поэтому я перенес его на iOS 13, используя Popovers!

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

Заключение🔗

Системные компоненты великолепны, если вы готовы пожертвовать возможностью настройки. Это и хорошо, и плохо — поскольку все приложения используют одни и те же компоненты, пользовательский интерфейс становится очень согласованным на всей платформе. Но если вам нужен хоть малейший контроль, вы застряли.

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