可以通过简单的初始化器从UIColor颜色中获取SwiftUI,如下所示:
let primary = UIColor(Color("primary"))我在资产目录中添加了带有光和暗模式的颜色。如果primary在UIKit代码中使用,不幸的是,它只给了我光模式的版本,并且不会动态地更改暗模式的颜色。
我不知道,如何从一种颜色中获取暗光模式的颜色,把自己的扩展写成一座桥梁。
有解决方案吗?还是您总是从UIColors开始并将其连接到SwiftUI代码中?该项目仍然在很大程度上基于UIKit,但是新的视图是用SwiftUI编写的。
发布于 2022-01-21 18:22:07
我觉得你想要的是不可能的。为了实现这一点,您需要一个Color的初始化器,它需要一个简单的、黑暗的变体,以及一种解决特定接口风格(这两者都不可能)的cgColor的方法。但是,您的共同点可能是资产目录中颜色的颜色名称,您可以从标识符中派生您的SwiftUI/UIKit颜色。
struct ColorId: RawRepresentable, Equatable, Hashable {
let rawValue: String
init(_ rawValue: String) {
self.init(rawValue: rawValue)
}
init(rawValue: String) {
self.rawValue = rawValue
}
static let primaryText = ColorId("asset_name_of_primary_text_color")
}
extension ColorId {
var color: Color { Color(rawValue) }
var uiColor: UIColor? { UIColor(named: rawValue) }
}
struct SomeView: View {
let textColor = ColorId.primaryText
var body: some View {
Text("Text")
.foregroundColor(textColor.color)
}
}
final class SomeUIView: UILabel {
private let textColorId: ColorId
init(textColorId: ColorId) {
self.textColorId = textColorId
super.init(frame: .zero)
self.textColor = textColorId.uiColor
}
required init?(coder: NSCoder) { fatalError("need a color id") }
}然后传递您的颜色ids,并在需要时获取UIColor或Color值。如果你使用像RSwift这样的东西,你也可以通过ColorResource。
https://stackoverflow.com/questions/70801547
复制相似问题