programing

UIColor를 Swift로 변환하는 방법UI의 색

bestprogram 2023. 8. 5. 10:43

UIColor를 Swift로 변환하는 방법UI의 색

개체의 전경색으로 UIColor를 사용하고 싶은데 UIColor를 Color로 변환하는 방법을 모르겠습니다.

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

베타 5부터는 UIColor에서 Color를 작성할 수 있습니다.

Color(UIColor.systemBlue)

iOS 및 macOS 모두

Color이를 위한 네이티브 이니셜라이저를 사용하여UIColor또는NSColor주장으로서:

Color(.red) /* or any other UIColor/NSColor you need INSIDE parentheses */

전화 안 함Color(UIColor.red)노골적으로!!!이것은 당신의 스위프트를 연결할 것입니다.에 대한 UI 코드UIKit대신, 그냥 전화하세요.Color(.red)그러면 올바른 모듈이 자동으로 추론됩니다.

또한 이 차이에 유의하십시오.

Color.red     /* this `red` is SwiftUI native `red` */
Color(.red)   /* this `red` is UIKit `red` */

suColor vs uiColor

참고:

Color.red그리고.UIColor.red동일하지 않습니다!그들은 서로 다른 가치관을 가지고 있고 서로 다르게 보입니다.그러니 아무 가치도 없는 이라고 생각하지 마

대신 다음은 동일합니다.SwiftUI.Color.Red == UIKit.UIColor.systemRed

또한 Swift에서 RGB 구성 요소를 가져오는 방법을 확인할 수 있습니다.UI.색상


확장

사용자 지정 변수를 구현하여 다음과 같이 만들 수 있습니다.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

참고: 변환 방법보려면 여기를 클릭하십시오.

두 개의 도우미 확장 사용:

구성 요소 추출 방법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)

편리한 확장 기능을 갖춘 Swift UI에서 사용자 지정 색상:

extension UIColor {
    struct purple {
        static let normal = UIColor(red:0.043, green:0.576 ,blue:0.588 , alpha:1.00)
        static let light = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        static let dark = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
    }
    struct gray {
        static let normal = UIColor(red:0.5, green:0.5 ,blue:0.5 , alpha:1.00)
        static let dark = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
    }
}

포장ColorSwiftUI:

extension UIColor {
    var toSUIColor: Color {
        Color(self)
    }
}

다음을 사용합니다.

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

    // with wrap
    //.foregroundColor(UIColor.purple.normal.toSUIColor)
    //.background(UIColor.gray.normal.toSUIColor)
}

저는 정말 오래된 취미 생활자입니다.여기 저에게 맞는 한 가지 방법이 있습니다.예, Constant.swift 파일의 재사용 가능한 문에는 전역을 사용합니다.이 예제는 보기 쉽도록 인라인으로 되어 있습니다.나는 이것이 가야 할 길이라고 말하는 것이 아니라 단지 나의 예전 방식일 뿐입니다.

스크린샷(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)

다음과 같은 확장명을 만듭니다.

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)
    }
}

언급URL : https://stackoverflow.com/questions/56994464/how-to-convert-uicolor-to-swiftui-s-color