Как анимировать состояния кнопок в ButtonStyle
В предыдущей статье мы использовали принципы неоморфного дизайна для создания аудиоплеера. Для ознакомления с цветами, использованными в этом уроке, проверьте эту статью.
Добавьте нейроморфные цвета в свои активы и создайте структуру для трех цветов перед началом этого урока.
Фон кнопки
Начиная с фона кнопки, добавьте прямоугольники со скругленными углами для формы кнопки, верхний темный край, нижний светлый край и темную внутреннюю тень.
Используйте stroke()
для прямоугольников со скругленными углами для наших ободков и теней.
Затем добавьте blur()
к внутренней темной тени, затем добавьте маски к внутренней тени и краям, чтобы сделать их края более четкими.
В ZStack добавьте два модификатора shadow()
для создания внешнего света и темных теней. Края и внутренняя тень заставят наш вид казаться вдавленным (вогнутым), а внешние тени сделают его приподнятым (выпуклым).
Далее нам нужно, чтобы внешняя тень отображалась всякий раз, когда кнопка не нажата, и наоборот.
Для этого мы можем добавить opacity()
ко всем цветам всех теней и краев. Передайте внешней тени их значение непрозрачности и передайте значения, противоположные этим значениям, краям и внутренним теням.
Значения отправляются из стиля кнопки, который мы собираемся создать далее. Проверьте приведенный ниже код для разрешения:
Стиль кнопки
Внутри нашего ButtonStyle
получите текст конфигурации и добавьте фон, созданный выше, к метке.
Анимированными значениями будут непрозрачность, масштаб кнопки, а также радиус и положение внешней тени.
В .onChange()
проверяем, нажата ли кнопка и меняем значения всех наших переменных состояния. Проверьте код ниже:
Пользовательская кнопка
Сделайте цвет фона вашего представления цветом нашей неоморфной кнопки. Наконец, добавьте стиль кнопки, который мы создали, в представление кнопки и запустите приложение.
Спасибо за прочтение!