swift - 如何在 SwiftUI 中从 Color 获取 RGB 分量

标签 swift colors rgb swiftui

如果我有一个 SwiftUI Color:

let col: Color = Color(red: 0.5, green: 0.5, blue: 0.5)

如何从 col 获取 RGB 分量?
可能像这样:

print(col.components.red)

在 UIKit 中,我可以使用 UIColor.getRed,但在 SwiftUI 中似乎没有等效项。

最佳答案

iOS 14/macOS 10.16

有一个新的初始化器,它接受一个 Color 并为 iOS 返回一个 UIColor 或为 NSColor strong>ma​​cOS 现在。在这些人的帮助下,您可以实现以下扩展:

iOS/macOS

import SwiftUI

#if canImport(UIKit)
import UIKit
#elseif canImport(AppKit)
import AppKit
#endif

extension Color {
    var components: (red: CGFloat, green: CGFloat, blue: CGFloat, opacity: CGFloat) {

        #if canImport(UIKit)
        typealias NativeColor = UIColor
        #elseif canImport(AppKit)
        typealias NativeColor = NSColor
        #endif

        var r: CGFloat = 0
        var g: CGFloat = 0
        var b: CGFloat = 0
        var o: CGFloat = 0

        guard NativeColor(self).getRed(&r, green: &g, blue: &b, alpha: &o) else {
            // You can handle the failure here as you want
            return (0, 0, 0, 0)
        }

        return (r, g, b, o)
    }
}

用法

Color.red.components.red // 0.9999999403953552 // <- SwiftUI Colors are not pure!

关于swift - 如何在 SwiftUI 中从 Color 获取 RGB 分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56586055/

相关文章:

objective-c - 快速将 UIColor 转换为 CGColor

ios - 动画 View 约束而不动画其他 View

json - 如何在 SWIFT 中处理 JSON 中的空值

css - 在背景下继承颜色

Xamarin 窗体 : How to change the back button color

c# - 将 System.Drawing.Color 转换为 RGB 和十六进制值

css - 除了 'opacity' 之外,RGB 和 RGBA 之间有什么区别

excel - Excel 中条件格式 'Styles' 的 RGB 代码是什么?

ios - TableView 单元格的索引路径不可访问

swift - 尝试使用地址簿 API 打印联系人时应用程序崩溃