Получите пользу от палитры цветов SwiftUI

I OS 14 поставляется с собственными средствами выбора цвета для UIKit (UIColorWell), AppKit (NSColorWell) и SwiftUI ( ColorPicker).

В то время как цветные колодцы обладают свойством selectedColor который выставляет выбранные UIColor/NSColor значения, SwiftUI ColorPicker занимает Binding<Color>. Однако я не могу найти никакой информации, как получить что-нибудь полезное изColor значение.

Создание Color из UIColor легко использовать Color.init(_: UIColor) но, похоже, нет способа получить UIColor из существующего Color или для извлечения компонентов цвета (например, значений RGB, аналогичных UIColor.getRed(_:green:blue:alpha:) метод).

Как получить базовые значения цвета из SwiftUI ColorPicker?

2 ответа

Решение

В большинстве случаев вы используете Color в SwiftUI напрямую, т.е. ничего извлекать из него не нужно.

Во всяком случае, если нужно иметь UIColor SwiftUI 2.0 предоставляет для этого новый API

extension UIColor {

    @available(iOS 14.0, tvOS 14.0, watchOS 7.0, *)
    @available(OSX, unavailable)
    public convenience init(_ color: Color)
}
      import SwiftUI
extension Color {
    struct Components {
        var r, g, b, a: Double
    }
    
    var components: Components? {
        guard let components = UIColor(self).cgColor.components?.compactMap(Double.init),
              components.count == 4
        else { return nil}
        return Components(r: components[0], g: components[1], b: components[2], a: components[3])
    }
}
// Usage
print(Color.primary.components)
Другие вопросы по тегам