如何像从 SwiftUI 中获得的那样定义自定义原色?

use*_*ser 3 swift swiftui

我想定义一个像 SwiftUI Primary Color 这样的颜色!现在我正在解决我的问题,并在代码中colorScheme使用类似的方法:if


struct ContentView: View {
    var body: some View {
        CustomPrimaryView()
            .frame(width: 100, height: 100)
            .cornerRadius(10)
        Color.primary
            .frame(width: 100, height: 100)
            .cornerRadius(10)
    }
}    
Run Code Online (Sandbox Code Playgroud)
struct CustomPrimaryView: View {   
    @Environment(\.colorScheme)
    var colorScheme
    var body: some View {
        colorScheme == .light ?
            Color(red: 0.1, green: 0.1, blue: 0.1) :
            Color(red: 0.95, green: 0.95, blue: 0.95)
    }
}
Run Code Online (Sandbox Code Playgroud)

我想定义一个 customPrimary Color 并将其作为颜色而不是视图来访问,它动态地完成我在该视图中所做的工作。我们如何在 SwiftUI 中做到这一点?


。。。还在寻找纯 SwiftUI 答案!!!


rob*_*off 5

您所说的是动态颜色,它根据当前的外观特征在应用于填充像素时选择其 RGB 值。

SwiftUI Color(截至 2021 年)不直接支持在代码中创建自定义动态颜色。这里有两种创建动态的方法Color

资产目录

您可以通过在资产目录中创建颜色集来创建动态颜色。它看起来像这样:

Xcode 中资源目录中的颜色设置

请在 Xcode 帮助中了解更多相关信息:创建资产目录和集

Color然后,您可以使用初始值设定项将颜色集加载为 SwiftUI Color.init(_ name: String, bundle: Bundle = nil)。例如:

let myColor = Color("MyColor")
Run Code Online (Sandbox Code Playgroud)

UIColor

您可以使用UIColor.init(dynamicProvider:)创建一个动态UIColor,然后将其包装在 SwiftUI 中Color

let uiColor = UIColor { traits in
    if traits.userInterfaceStyle == .dark {
        return .init(red: 0.567, green: 0.622, blue: 0.725, alpha: 1)
    } else {
        return .init(red: 0.204, green: 0.324, blue: 0.374, alpha: 1)
    }
}

let color = Color(uiColor: uiColor)
Run Code Online (Sandbox Code Playgroud)

如果您的目标是 macOS,则可以使用NSColor.init(name:dynamicProvider:).