swiftui - 自定义 SwiftUI 颜色的深色模式

标签 swiftui customization ios-darkmode

我从设计师那里得到了一系列不同色调的颜色。这是我的制作方法

public struct Colors {
    public static let blue = Blue()
    public static let grey = Grey()
    public static let black = Black()
    public static let green = Green()
    public static let orange = Orange()
    public static let red = Color(hexString: "#F8454D")
    public static let yellow = Color(hexString: "#FFAE03")
    public init() {

    }
}

public struct Blue {
    public let light: Color = Color(hexString: "9AB1D0")
    public let medium: Color = Color(hexString: "215499")
    public let dark: Color = Color(hexString: "153662")
}

public struct Grey {
    public let light: Color = Color(hexString: "CCCDD0")
    public let medium: Color = Color(hexString: "757780")
    public let dark: Color = Color(hexString: "404146")
}
public struct Black {
    public let light: Color = Color(hexString: "A2A4A6")
    public let medium: Color = Color(hexString: "33383D")
    public let dark: Color = Color(hexString: "0A0B0C")
}
public struct Green {
    public let light: Color = Color(hexString: "ACD3BA")
    public let medium: Color = Color(hexString: "499F68")
    public let dark: Color = Color(hexString: "285739")
}
public struct Orange {
    public let light: Color = Color(hexString: "F4BBA5")
    public let medium: Color = Color(hexString: "E76B39")
    public let dark: Color = Color(hexString: "542715")
}

这些“颜色”都不会像系统提供的颜色那样自动响应深色模式。

如何分配“反色”颜色,以便我可以在不使用系统颜色的情况下利用深色模式?

最佳答案

分配您喜欢的“反色”颜色的一种方法是这样的:

public struct Colors {
    public var blue: MyColor = Blue()
    .....

    public init(colorScheme: ColorScheme) {
        self.blue = colorScheme == .light ? Blue() : BlueForDarkMode()
     .....
    }
}

public protocol MyColor {
    var light: Color { get }
    var medium: Color { get }
    var dark: Color { get }
}

// Orange for testing
public struct BlueForDarkMode: MyColor {
    public let light: Color = Color(hexString: "F4BBA5")
    public let medium: Color = Color(hexString: "E76B39")
    public let dark: Color = Color(hexString: "542715")
}

public struct Blue: MyColor {
    public let light: Color = Color(hexString: "9AB1D0")
    public let medium: Color = Color(hexString: "215499")
    public let dark: Color = Color(hexString: "153662")
}

然后你这样调用它:

struct ContentView: View {

    @Environment(\.colorScheme) var colorScheme

    @State var myColors = Colors(colorScheme: .light)

    var body: some View {
        Rectangle()
            .frame(width: 300, height: 300)
            .foregroundColor(myColors.blue.medium)
            .onAppear(perform: {self.myColors = Colors(colorScheme: self.colorScheme)})
    }
}

请注意,您将需要做更多的工作来“感知”模式更改,但这是另一个问题。

关于swiftui - 自定义 SwiftUI 颜色的深色模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61242744/

相关文章:

menu - 如何在 Liferay 控制面板中隐藏我的帐户 portlet 的选项卡

PostgreSQL 自定义周数 - 包含 2 月 1 日的第一周

ios - 如何在 Swift 中处理深色模式的自定义颜色

SwiftUI:如何在纵向模式下锁定特定 View ,同时允许其他人更改方向?

scrollview - 使用 SwiftUI 加载更多功能

iOS : Sliding tab layout with UITableview in swift

flutter - Flutter如何在没有Media Query的情况下获得亮度?

ios - 从 Flutter/Dart 检测 iOS13 深色模式是否启用

SwiftUI 关闭模式

ios - SwiftUI 如何给 Slider 一个最小值和最大值并在 Text 中显示它的值?