SwiftUIビューの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)
}
}
基本的に、Appleはこの変換を行うことを意図していません。SwiftUIのColor
はView
であり、フレームワークの設計はデータが表示されるView
。View
からデータを抽出する必要はありません。
色のコンポーネントを使用する必要がある場合は、UIColor
を使用して、表示する準備ができたときにColor
に変換する必要があります。
Color.red
のようなシステムカラーのコンポーネントを取得しようとしている場合、それらはアクセス可能なコンポーネントを持っているアダプティブUIColor.systemRed
と同じだと思います。
標準色 ドキュメント