Конвертировать SwiftUI Color в UIColor - PullRequest
2 голосов
/ 10 января 2020

Я хочу преобразовать SwiftUI view Color в компонент UIKit UIcolor. Я пробовал несколько способов, а также сослаться на StackOverflow уже даны ответы, но они не сработали Это было также упомянуто некоторыми пользователями в тех постах. Я прошел через приведенный ниже код, который предлагается turingtested

, но это не работает. Любые предложения или помощь действительно приветствуются.

fileprivate extension Color {
    func uiColor() -> UIColor {
        let components = self.components()
        return UIColor(red: components.r, green: components.g, blue: components.b, alpha: components.a)
    }
    private func components() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) {
        let scanner = Scanner(string: self.description.trimmingCharacters(in: CharacterSet.alphanumerics.inverted))
        var hexNumber: UInt64 = 0
        var r: CGFloat = 0.0, g: CGFloat = 0.0, b: CGFloat = 0.0, a: CGFloat = 0.0
        let result = scanner.scanHexInt64(&hexNumber)
        if result {
            r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
            g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
            b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
            a = CGFloat(hexNumber & 0x000000ff) / 255
        }
    return (r, g, b, a)
    }
}

1 Ответ

1 голос
/ 10 января 2020

По сути, Apple не собирается делать это преобразование. Color в SwiftUI - это View, а структура фреймворка такова, что данные передаются в View, который затем отображается. Вы никогда не должны извлекать данные обратно из View.

. Если вам нужно использовать компоненты цвета, вы должны работать с UIColor, а затем преобразовать в Color в раз вы готовы его отобразить.

Если вы пытаетесь получить компоненты системных цветов, такие как Color.red, я считаю, что они совпадают с адаптивным UIColor.systemRed, который имеет доступные компоненты.

Стандартные цвета Документация

...