我正在尝试根据当前颜色更改UIViewbackgroundColor。例如。说MyView现在是红色,触摸时我想使其变成蓝色,反之亦然。但是我注意到我无法获得正确的UIColor名称来检查当前颜色。

例如,如果我这样做:

if MyView.backgroundColor == .systemRed {
        print("Red")
    } else {
        print("Not red")
    }

即使我明确设置了MyView.backgroundColor = .systemRed,这也将始终打印“Not red”

当我检查使用的颜色时:
print("Color = \(MyView.backgroundColor)")

打印:[...] name = systemRedColor
但是当我将.systemRed更改为.systemRedColor时,它给出了错误
'systemRedColor' has been renamed to 'systemRed'

我回到了开始的地方。

谁能告诉我我想念的东西吗?如何正确阅读并设置backgroundColorUIView

最佳答案

.systemRed是动态系统颜色之一,将根据视图的当前特征条件(即暗模式/亮模式)显示不同的颜色。因此,您需要使用.resolvedColor(with traitCollection:)函数访问当前颜色。

灯光模式中,systemRed将显示为:
UIExtendedSRGBColorSpace 1 0.231373 0.188235 1
R255 G59 B48

黑暗模式中,systemRed将显示为:
UIExtendedSRGBColorSpace 1 0.270588 0.227451 1
R255 G69 B58

if view.backgroundColor?.resolvedColor(with: view.traitCollection) == UIColor.systemRed.resolvedColor(with: view.traitCollection) {
    print("true")
}

这将与动态和标准UIColor一起使用。

您也可以在UIColor上进行扩展以执行此操作
extension UIColor {
    class func compare(_ colorA: UIColor?, with colorB: UIColor?, in view: UIView) -> Bool {
        colorA?.resolvedColor(with: view.traitCollection) == colorB?.resolvedColor(with: view.traitCollection)
    }
}

用法:
if UIColor.compare(self.view.backgroundColor, with: .systemRed, in: view) {
    print("true")
}

关于ios - 如何正确获取和设置UIView的UIColor?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61760182/

10-09 16:14