Стиль кнопок SwiftUI | Sarunw
В предыдущем посте о том, как создать дизайн Neumorphic в SwiftUI, я описал, как вы можете настроить внешний вид кнопки, но, как вы можете видеть, это немного многословно и сложно для повторного использования. Если вы хотите применить неоморфный дизайн везде, это будет невозможно.
Моей первой мыслью решить эту проблему был старый друг ViewModifier . Я писал о модификаторе представления в предыдущем посте ViewModifier SwiftUI и рекомендовал вам проверить его.
ViewModifier
Чтобы сделать неоморфный стиль кнопки из модификатора вида, мы просто копируем все модификаторы, которые мы используем для создания неоморфного дизайна, и помещаем их во вновь созданный ViewModifier . Код почти такой же, как в статье Как создать дизайн Neumorphic в SwiftUI. Я просто создаю из него ViewModifier.
Я буду краток, так как это не тот способ, который я рекомендовал. Если вы заинтересованы в ViewModifier, ознакомьтесь с моим предыдущим постом SwiftUI ViewModifier.
struct Neumorphic: ViewModifier {
var bgColor: Color
@Binding var isPressed: Boolfunc body(content: Content) -> some View {
content
.padding(20)
.background(
ZStack {
RoundedRectangle(corn erRadius : 10, стиль: .continuous)
.shadow(цвет: .white, радиус: self.isPressed ? 7: 10, x: self.isPressed ? -5: -15, y: self.isPressed ? -5: -15 )
.shadow(цвет: .black, радиус: self.isPressed ? 7:10, x: self.isPressed ? 5:15, y: self.isPressed ? 5:15).blendMode(.overlay)
RoundedRectangle(cornerRadius: 10, стиль: .continuous)
.fill(bgColor)
}
)
.scaleEffect(self.isPressed ? 0,95: 1)
.foregroundColor(.primary)
. анимация(.spring())
}
}extension View {
func neumorphic(isPressed: Binding, bgColor: Color) -> some View {
self.modifier(Neumorphic(bgColor: bgColor, isPressed: isPressed ))
}
}
И мы используем это, применяя это к содержимому кнопки.
struct ContentView: View {
@State private var isPressed: Bool = falsevar body: some View {
Button(action: {
self.isPressed.toggle()
}, label: {
VStack {
Text( "Привет")
}.neumorphic(isPressed: $isPressed, bgColor: .neuBackground)
}).frame(maxWidth: .infinity,
maxHeight: .infinity)
.background(Color.neuBackground)
.edgesIgnoringSafeArea(.all )
}
}
Как видите, переиспользовать проще, но все равно не лучший способ. Во-первых, довольно раздражает необходимость отслеживать состояние нажатия. Во-вторых, мы применяем стиль к содержимому кнопки, а не к самой кнопке. У него должен быть лучший способ сделать это. К счастью, у SwiftUI есть. Кнопка имеет модификатор, который принимает
ButtonStyle
ButtonStyle — это правильный способ стилизации наших кнопок. Apple также определяет некоторые для нас.
struct ContentView: View {
var body: some View {
VStack {
Button("Обычная", action: {
}). buttonStyle(PlainButtonStyle())Button("Borderless", action: {
}) .buttonStyle(BorderlessButtonStyle())Кнопка("По умолчанию", действие: {
}).buttonStyle(DefaultButtonStyle())
}
}
}
Для iOS у нас есть только два стиля. PlainButtonStyle
, который не стилизует и не украшает содержимое во время простоя. Он будет отображать содержимое черным цветом и более тонкими эффектами затухания, когда щелчок сравнивается с BorderlessButtonStyle
.
Для macOS у нас есть дополнительные параметры: PlainButtonStyle
, LinkButtonStyle
, BorderedButtonStyle
и BorderlessButtonStyle
.
Как создать собственный стиль кнопок?
Вы можете создать собственный стиль, создав новую структуру, соответствующую протоколу ButtonStyle . Протокол ButtonStyle предполагает, что мы реализуем одну функцию, func makeBody(configuration: Self. Configuration) -> Self.Body
.
Функция создает View
, представляющий тело Button
. Вы получите ButtonStyleConfiguration
в качестве параметра, который содержит содержимое кнопки ( label
), а логическое значение указывает, что кнопка в данный момент нажата пользователем ( isPressed
).
Реализация довольно проста, мы копируем большую часть кода из нашего предыдущего примера, но на этот раз нам не нужно сохранять состояние isPressed
, так как оно предоставляется ButtonStyleConfiguration
.
struct NeumorphicButtonStyle: ButtonStyle {
var bgColor: Colorfunc makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.padding(20)
.background(
ZStack {
RoundedRectangle( уголРадиус: 10 , стиль: .continuous)
.shadow (цвет: .white, радиус: configuration.isPressed ? 7: 10, x: configuration.isPressed ? -5: -15, y: configuration. isPressed ? -5: -15)
.shadow (цвет: . черный, радиус: configuration.isPressed ? 7: 10, x: configuration.isPressed ? 5: 15, y: configuration.isPressed ? 5: 15)
.blendMode (.overlay)
RoundedRectangle (cornerRadius: 10, стиль: .continuous )
.fill(bgColor)
}
)
.scaleEffect(configuration.isPressed ? 0,95: 1)
.foregroundColor(.primary)
.animation(.spring())
}
}
Пользовательский стиль можно использовать так же, как и системный.
Button("Neumorphic", action: {Конечный результат}).buttonStyle(NeumorphicButtonStyle(bgColor: .neuBackground))
Заключение
SwiftUI позволяет очень легко настроить стиль кнопки. Протокол ButtonStyle работает аналогично протоколу ViewModifier, за исключением того, что он предназначен для кнопок.
Как видите, мы можем использовать тот же код и сделать его более структурированным и пригодным для повторного использования, приложив небольшие усилия, просто зная особенности фреймворка. Мне еще многое предстоит узнать об этой новой структуре. Подпишитесь или следите за мной в Твиттере, чтобы получать больше таких сообщений. Поделитесь этим с друзьями с благодарностью.
- ViewModifier SwiftUI
- Как создать дизайн Neumorphic в SwiftUI
Не стесняйтесь подписываться на меня в Твиттере и задавать вопросы, связанные с этим постом. Спасибо за чтение и увидимся в следующий раз.
Если вам нравится то, что я пишу, зайдите на мой Patreon https://www.patreon.com/sarunw и поддержите меня. Распространение статьи также приветствуется.
Кнопки Bootstrap — примеры и руководство
Кнопки
Отзывчивые кнопки, созданные с помощью Bootstrap 5. Несколько предопределенных классов стилей кнопок: ссылка на кнопку, контур, круглая кнопка, социальная, плавающая, фиксированная и многое другое.
Используйте пользовательские стили кнопок MDB для действий в формах, диалоговых окнах и т. д. с поддержкой различные размеры, состояния и многое другое.
Примечание: Прочтите вкладку API , чтобы найти все доступные параметры и расширенная настройка
Видеоруководство
Базовый пример
Используйте стиль кнопки по умолчанию для обозначения действия или ссылки на вашем веб-сайте.
Показать код Изменить в песочнице
Отключить перенос текста
Если вы не хотите, чтобы текст кнопки переносился, вы можете добавить .text-nowrap
класс для кнопки. В Sass вы можете установить $btn-white-space: nowrap
, чтобы отключить перенос текста для каждой кнопки.
Иерархия
Кнопки, как один из ключевых элементов пользовательского интерфейса, должны иметь свою иерархию. Это означает, что пользователь должен иметь возможность легко определить, какая кнопка является наиболее важной (основная кнопка), какая менее важна (дополнительная кнопка) и которая предоставляет совершенно дополнительную информацию (третичная кнопка).
Элементы с ярким, заполненным фоном и тенями больше всего привлекают внимание, поэтому основная кнопка построена таким образом.
Нежный фон без теней менее привлекателен, поэтому он хорошо подходит для вторичной кнопки .
Отсутствие фона и тени делает элемент наименее заметным. Эти особенности характеризуют третичную кнопку .
мх-2
.Показать код Изменить в песочнице
Контекстный
MDB включает в себя несколько предопределенных стилей кнопок, каждый из которых служит своей собственной семантической цели.
Показать код Изменить в песочнице
Передача смысла вспомогательным технологиям:
Использование цвета для добавления значения обеспечивает только визуальную индикацию, которая не передается
пользователи вспомогательных технологий, таких как программы для чтения с экрана. Убедитесь, что информация, обозначенная
цвет либо очевиден из самого содержимого (например, видимого текста), либо включен
с помощью альтернативных средств, таких как дополнительный текст, скрытый с помощью
.
Нейтральный
Нейтральные кнопки обеспечивают дополнительные светлые и темные цвета.
Показать код Изменить в песочнице
Ссылка
Кнопка «Ссылка» аналогична третичной кнопке (и часто используется вместо нее). Разница в том, что кнопка ссылки имеет фон при наведении, а также имеет отступ по умолчанию.
Показать код Изменить в песочнице
Внешний вид
Нужна кнопка, но не здоровенные цвета фона, которые они приносят? Заменить значение по умолчанию
классы-модификаторы с .btn-outline-*
для удаления всех фоновых изображений и
цвета на любой кнопке.
В кнопки схемы мы рекомендуем добавить data-mdb-ripple-color="dark"
для изменения цвета волновой эффект . Светлый цвет ряби по умолчанию (применяется автоматически
каждой кнопке) может быть не очень хорошо видно в случае световых и контурных кнопок.
Чтобы узнать больше о волновом эффекте и всех доступных параметрах, посмотрите Документы пульсации.
Показать код Изменить в песочнице
Некоторые стили кнопок используют относительно светлый цвет переднего плана и должны использоваться только на темный фон, чтобы иметь достаточный контраст.
Округлый
Добавьте класс .btn-rounded
, чтобы сделать кнопку закругленной.
Показать код Изменить в песочнице
Округлый контур
Вы можете использовать .btn-outline-*
и .btn-rounded
вместе, чтобы сделать
контур кнопки и закругленный одновременно.
Показать код Изменить в песочнице
Плавающий
Используйте класс . btn-floating
, чтобы сделать круглую кнопку.
Чтобы он работал должным образом, вы должны поместить внутрь иконку. Текст не будет подходит. Вы можете найти сотни доступных значков в нашем значки документы.
Показать код Изменить в песочнице
<тип кнопки="кнопка"> <я>я> кнопка>
К плавающим кнопкам можно применять почти все те же классы и атрибуты, что и к кнопкам. обычные кнопки — цвета, рябь, размеры, контур и т. д.
Показать код Изменить в песочнице
<тип кнопки="кнопка"> <я>я> кнопка>
Фиксированные кнопки
Используйте класс . fixed-action-btn
для создания фиксированной кнопки со списком доступных
параметры, которые отображаются при наведении или щелчке.
См. живой пример фиксированной кнопки в правом нижнем углу этой страницы.
Примечание: Доступны показать
/ скрыть
методы для
вручную открывать и закрывать список. Прочтите вкладку API , чтобы найти дополнительную информацию.
Показать код Изменить в песочнице
<дел> <а> <я>я> <ул>