如何将“ UIColor”转换为SwiftUI的“ Color”

时间:2019-07-11 17:25:07

标签: swift colors uicolor swiftui

我想使用UIColor作为对象的前景色,但是我不知道如何将UIColor转换为颜色

var myColor: UIColor
RoundedRectangle(cornerRadius: 5).foregroundColor(UIColor(myColor))

6 个答案:

答案 0 :(得分:21)

从beta 5开始,您可以从UIColor创建颜色:

Color(UIColor.systemBlue)

答案 1 :(得分:2)

使用两个帮助程序扩展名:

要从UIColor中提取成分:

extension UIColor {
    var rgba: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0
        getRed(&red, green: &green, blue: &blue, alpha: &alpha)

        return (red, green, blue, alpha)
    }
}

init一起UIColor

extension Color {
    init(uiColor: UIColor) {
        self.init(red: Double(uiColor.rgba.red),
                  green: Double(uiColor.rgba.green),
                  blue: Double(uiColor.rgba.blue),
                  opacity: Double(uiColor.rgba.alpha))
    }
}

用法:

Color(uiColor: .red)

答案 2 :(得分:1)

在带有方便扩展名的Swift UI自定义颜色中:

var body: some View {
    Text("Hello World")
    .foregroundColor(Color(UIColor.purple.normal))
    .background(Color(UIColor.gray.normal))
}

并使用它:

{{1}}

使用Xcode 11.0 beta 6编辑,并且代码可能会更改

答案 3 :(得分:0)

我是一个非常老的业余爱好者。这是一种对我有效的方法。是的,我对Constant.swift文件中的可重用语句使用了全局变量。此示例是内联的,因此更易于查看。我不是说这是要走的路,这只是我的老路。

Screenshot (27k)

   import SwiftUI

    // named color from the developer's pallet
    let aluminumColor = Color(UIColor.lightGray)

    // a custom color I use often
    let butterColor = Color.init(red: 0.9993399978, 
                               green: 0.9350042167, 
                               blue: 0.5304131241)

    // how I use this in a SwiftUI VStack:

    Text("Fur People")
           .font(.title)
           .foregroundColor(aluminumColor)
           .shadow(color: butterColor, radius: 4, x: 2, y: 2)
           .minimumScaleFactor(0.75)

答案 4 :(得分:0)

它具有一个本机初始化程序,该初始化程序以UIColor作为参数:

Color(.red) // or any other UIColor you need

扩展名

您可以为其实现自定义变量,使其更像cgColor和ciColor`

extension UIColor {
    /// The SwiftUI color associated with the receiver.
    var suColor: Color { Color(self) }
}

所以它就像:

UIColor.red         // UIKit color
UIColor.red.suColor // SwiftUI color
UIColor.red.cgColor // Core graphic color
UIColor.red.ciColor // Core image color

请注意:

Color.redUIColor.red 不同!它们具有不同的值和彼此外观不同。所以不要假设这毫无价值

suColor vs uiColor

答案 5 :(得分:0)

创建这样的扩展名:

extension Color {
    static let someColor = Color(UIColor.systemIndigo) // << Select any UIColor
}

用法:

struct ContentView: View {
       var body: some View {
        Rectangle()
            .frame(width: 100, height: 100)
            .foregroundColor(.someColor)
    }
}