Добавить объявление

SwiftUI: плавный переход от кнопки к sheet

С выходом iOS 26 и Liquid Glass компания Apple добавила не только новый стиль, но и новые анимации переходов. Одна из самых заметных мелочей - морфинг листа (sheet) из кнопки, которая его вызывает. Вместо стандартного выезда снизу кнопка буквально превращается в модальное окно. Выглядит эффектно и требует совсем немного строк кода.

Как это работает:


Раньше любой sheet просто выезжал снизу экрана, независимо от того, откуда его вызвали. Теперь можно связать кнопку и sheet через общий namespace и SwiftUI сам анимирует трансформацию одного в другое.

Все, что нужно - три простых шага:


  • Создать namespace для анимации.

  • Повесить на кнопку модификатор .matchedTransitionSource с уникальным ID.

  • Добавить на лист .navigationTransition(.zoom(...)) с тем же ID и namespace.


@Namespace private var animation

Button("Выбрать дату") { showSheet = true }
.matchedTransitionSource(id: "datePicker", in: animation)
.sheet(isPresented: $showSheet) {
DatePickerView()
.navigationTransition(.zoom(sourceID: "datePicker", in: animation))
}

Где можно использовать:


Кнопка не обязана быть в тулбаре. Эффект работает отовсюду:

  • Из нижней панели (как в примерах Apple).

  • Из верхнего бара.

  • Из обычной кнопки в центре экрана.

  • Даже из ячейки списка.

Везде, где есть кнопка, можно сделать этот плавный переход. Анимация подстраивается под положение и размер исходного элемента.

Когда это уместно:


Морфинг sheet - отличный способ визуально связать действие и результат. Пользователь нажимает на кнопку и видит, как она превращается в интерфейс выбора. Это добавляет приложению отзывчивости.

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

Вывод:


Морфинг листов из тех деталей, которые незаметны, когда они есть, но сразу бросаются в глаза, когда их нет. Apple добавила эту анимацию не ради галочки, а чтобы интерфейс ощущался цельным: кнопка не просто запускает появление окна, а буквально становится им. Визуальная связь между действием и результатом работает на подсознании, и пользователю не нужно объяснять, откуда взялся лист - он просто вырастает из того места, куда нажали. Внедрение занимает минуту, но именно из таких минут складывается ощущение дорогого, продуманного продукта.
16.03.2026 45 180