• ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用


    1. ViewModifier 视图修饰符

      1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift

    1. import SwiftUI
    2. /// 默认按钮修饰符
    3. struct DefaultButtonViewModifier: ViewModifier{
    4. let bcakgroundColor: Color
    5. func body(content: Content) -> some View {
    6. content
    7. .foregroundColor(.white)
    8. .frame(height: 55)
    9. .frame(maxWidth: .infinity)
    10. .background(bcakgroundColor)
    11. .cornerRadius(10)
    12. .shadow(radius: 10)
    13. }
    14. }
    15. // 扩展 View
    16. extension View {
    17. func withDefaultButtonFormatting(backgroundColor: Color = .blue) -> some View{
    18. modifier(DefaultButtonViewModifier(bcakgroundColor: backgroundColor))
    19. }
    20. }
    21. /// 视图修饰符
    22. struct ViewModifierBootcamp: View {
    23. var body: some View {
    24. VStack(spacing: 10) {
    25. Text("Hello,world!")
    26. .font(.headline)
    27. .withDefaultButtonFormatting(backgroundColor: .orange)
    28. Text("Hello,everyone!")
    29. .font(.subheadline)
    30. .withDefaultButtonFormatting()
    31. Text("Hello !!!")
    32. .font(.title)
    33. .withDefaultButtonFormatting(backgroundColor: .red)
    34. }
    35. .padding()
    36. }
    37. }
    38. struct ViewModifierBootcamp_Previews: PreviewProvider {
    39. static var previews: some View {
    40. ViewModifierBootcamp()
    41. }
    42. }

      1.2 效果图:

    2. ButtonStyle 自定义按钮样式

      2.1 创建按下按钮样式,ButtonStyleBootcamp.swift

    1. import SwiftUI
    2. /// 按下按钮样式
    3. struct PressableButtonStyle: ButtonStyle{
    4. let scaledAmount: CGFloat
    5. init(scaledAmount: CGFloat) {
    6. self.scaledAmount = scaledAmount
    7. }
    8. func makeBody(configuration: Configuration) -> some View {
    9. configuration.label
    10. // 缩放
    11. .scaleEffect(configuration.isPressed ? scaledAmount : 1.0)
    12. // 点亮度
    13. //.brightness(configuration.isPressed ? 0.05 : 0)
    14. .opacity(configuration.isPressed ? 0.86 : 1)
    15. }
    16. }
    17. /// 扩展 View
    18. extension View{
    19. /// 按钮的样式
    20. func withPressableStyle(scaledAmount: CGFloat = 0.9) -> some View{
    21. buttonStyle(PressableButtonStyle(scaledAmount: scaledAmount))
    22. }
    23. }
    24. /// 按钮样式
    25. struct ButtonStyleBootcamp: View {
    26. var body: some View {
    27. Button {
    28. } label: {
    29. Text("Click Me")
    30. .font(.headline)
    31. .withDefaultButtonFormatting()
    32. }
    33. .withPressableStyle(scaledAmount: 0.86)
    34. .padding(40)
    35. }
    36. }
    37. struct ButtonStyleBootcamp_Previews: PreviewProvider {
    38. static var previews: some View {
    39. ButtonStyleBootcamp()
    40. }
    41. }

      2.2 效果图:

  • 相关阅读:
    高德地图 web js端 出现 INVALID_USER_SCODE 10008 MD5安全码未通过验证
    K8S之Ingress 对外暴露应用(十四)
    Snort的安装——Fedora
    Vue理解之路:如何在Vue项目中使用vuex
    Go 接口:深入内部原理
    分类效果评价(机器学习)
    华为云王楠楠:分布式云原生全域调度的技术和实践
    分类算法系列③:模型选择与调优 (Facebook签到位置预测)
    Axure基础详解二十一:动态面板随机抽奖效果
    Windows Server服务器下的Linux子系统
  • 原文地址:https://blog.csdn.net/u011193452/article/details/133774981