Я превратил вырез в экране MacBook в динамический элемент пользовательского интерфейса (DynamicNotch для macOS)

от автора

Когда Apple добавила вырез (notch) в MacBook, реакция у многих была примерно одинаковая:

он есть — и с ним приходится просто мириться.

В отличие от iPhone, где появился Dynamic Island и вырез стал частью интерфейса, на macOS он до сих пор остаётся пассивным элементом. Он не несёт функциональной нагрузки и никак не взаимодействует с пользователем.

У меня возник простой вопрос:

а что если сделать вырез частью UI, а не ограничением?

Так появился проект DynamicNotch.

Preview: Сейчас играет

Preview: Сейчас играет

Идея

Основная идея — перестать воспринимать вырез как «дыру в экране» и начать использовать его как якорную точку для интерфейса.

Вместо того чтобы обходить его стороной, можно:

  • привязать к нему визуальные элементы

  • отображать контекстную информацию

  • использовать его как центр для анимаций и состояний

Фактически, это попытка перенести концепцию «живого» выреза с iOS на macOS.

Что делает DynamicNotch

Приложение создаёт динамическую область вокруг выреза, которая может:

  • Live Activity — постоянно отображаемое содержимое выреза остается видимым до тех пор, пока активно исходное событие, а затем исчезает по его завершении.

Preview: Скачивание файла

Preview: Скачивание файла
  • Temporary Activity — временные уведомления остаются видимыми на определенный промежуток времени, который можно изменять в настройках.

Preview: Низкий заряд батареи

Preview: Низкий заряд батареи
  • Widgets — отображать контент на заблокированном экране, то, что Apple не сделала до сих пор.

Preview: Заблокированный экран

Preview: Заблокированный экран
  • Settings — настройки выреза, позволяют настраивать под себя.

Preview: Настройки

Preview: Настройки

Техническая сторона

Проект написан на Swift с использованием SwiftUI/AppKit.

Основные сложности оказались не в отрисовке UI, а в интеграции с поведением macOS:

  • корректное позиционирование относительно выреза

  • работа с окнами и слоями поверх системы

  • синхронизация с системными событиями

По сути, это исследование границ того, насколько глубоко можно встроиться в системный UI c приватным API.

Заключение

DynamicNotch — это попытка переосмыслить один из самых спорных элементов современных MacBook и проверить, можно ли сделать его полезным.

Если у вас есть идеи, критика или мысли о том, как можно использовать вырез в macOS — будет очень интересно обсудить.

Также буду благодарен, если поставите звезду на GitHub.

Проект на GitHub

ссылка на оригинал статьи https://habr.com/ru/articles/1025350/