Kau*_*anu 2 uikit uiview uicolor swift swift-playground
最近我遇到了一个关于 Swift 中 UIColor 的有趣(可能是天真的)问题。
import UIKit
let view = UIView(frame: CGRect(x: 0,
y: 0,
width: 50,
height: 50))
view.backgroundColor = .systemBlue
let a = UIColor.systemBlue
switch a {
case .red:
print("red")
case .systemBlue:
print("blue")
default:
print("unknown")
}
Run Code Online (Sandbox Code Playgroud)
以下代码在操场上打印“蓝色”非常好,但发生了变化
let a = UIColor.systemBlue
to
let a = view.backgroundColor ?? .red
Run Code Online (Sandbox Code Playgroud)
在操场上打印“未知”,有人可以帮助这里发生了什么吗?我无法解决它。它是否在某些时候与值类型或引用类型相关?请帮忙!!
打印这两个值可以给你解释:
print(UIColor.systemBlue)
<UIDynamicSystemColor: 0x600000b47880;
name = systemBlueColor
>
Run Code Online (Sandbox Code Playgroud)
print(view.backgroundColor!)
<UIDynamicModifiedColor: 0x60000058bed0;
contrast = normal,
baseColor = <UIDynamicSystemColor: 0x600000b47880;
name = systemBlueColor
>
>
Run Code Online (Sandbox Code Playgroud)
设置backgroundColor属性时,UIKit 将颜色包装在私有类中UIDynamicModifiedColor。
如果您使用视图的特征比较解析的颜色,您将得到true:
UIColor.systemBlue.resolvedColor(with: view.traitCollection) ==
view.backgroundColor!.resolvedColor(with: view.traitCollection)
Run Code Online (Sandbox Code Playgroud)
解析的颜色是绝对颜色:
print(UIColor.systemBlue.resolvedColor(with: view.traitCollection))
UIExtendedSRGBColorSpace 0 0.478431 1 1
Run Code Online (Sandbox Code Playgroud)
诸如此类的颜色UIColor.systemBlue是动态颜色,可能会导致不同的颜色,具体取决于视图的特征,其中包括高对比度模式和暗/亮模式等因素。
自动适应当前特质环境的蓝色。
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |