首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从UIColor颜色(光和暗模式)获取动态SwiftUI

从UIColor颜色(光和暗模式)获取动态SwiftUI
EN

Stack Overflow用户
提问于 2022-01-21 12:49:22
回答 1查看 752关注 0票数 0

可以通过简单的初始化器从UIColor颜色中获取SwiftUI,如下所示:

代码语言:javascript
复制
let primary = UIColor(Color("primary"))

我在资产目录中添加了带有光和暗模式的颜色。如果primary在UIKit代码中使用,不幸的是,它只给了我光模式的版本,并且不会动态地更改暗模式的颜色。

我不知道,如何从一种颜色中获取暗光模式的颜色,把自己的扩展写成一座桥梁。

有解决方案吗?还是您总是从UIColors开始并将其连接到SwiftUI代码中?该项目仍然在很大程度上基于UIKit,但是新的视图是用SwiftUI编写的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-21 18:22:07

我觉得你想要的是不可能的。为了实现这一点,您需要一个Color的初始化器,它需要一个简单的、黑暗的变体,以及一种解决特定接口风格(这两者都不可能)的cgColor的方法。但是,您的共同点可能是资产目录中颜色的颜色名称,您可以从标识符中派生您的SwiftUI/UIKit颜色。

代码语言:javascript
复制
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,并在需要时获取UIColorColor值。如果你使用像RSwift这样的东西,你也可以通过ColorResource

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70801547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档