Получите пользу от палитры цветов 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)