// // ThemeManager.swift // SHECommunity // // Created by 林 on 2024/11/28. // import UIKit import SwiftyUserDefaults import ObjectMapper extension DefaultsKeys { var themeColor: DefaultsKey { .init("ThemeColor") } var themeFont: DefaultsKey { .init("ThemeFont") } } public class ThemeManager: NSObject { public static let shared = ThemeManager() private var themeColor = ThemeColor() private var themeFont = ThemeFont() public var color: ThemeColor { guard let jsonData = Defaults[\.themeColor] else { return themeColor } guard let themeColor = ThemeColor(data: jsonData) else { return self.themeColor } self.themeColor = themeColor return themeColor } public var font: ThemeFont { guard let jsonData = Defaults[\.themeFont] else { return themeFont } guard let themeFont = ThemeFont(data: jsonData) else { return self.themeFont } self.themeFont = themeFont return themeFont } /// 配置默认主题色、主题字体 public func configure(themeColor: ThemeColor?=nil, themeFont: ThemeFont?=nil) { if let color = themeColor { self.themeColor = color } if let font = themeFont { self.themeFont = font } } } public struct ThemeColor: Mappable { /// 主色 public var mainColor = UIColor(hexStr: "#7AD6FF") /// 辅助色 public var auxColor = UIColor(hexStr: "#F9BC0C") /// 导航栏标题颜色 public var navBarTitleColor = UIColor(hexStr: "#333333") /// 页面标题、板块标题、选中后文字色 public var titleColor = UIColor(hexStr: "#1F1613") public var titleAuxColor = UIColor(hexStr: "#333333") /// 用于二级页面重要功能操作入口 描述性文字 public var subTitleColor = UIColor(hexStr: "#666666") /// 用于次要信息、辅助功能,如提示说明文字 搜索栏默认文字 #999999 public var contentColor = UIColor(hexStr: "#999999") /// 线条 public var lineColor = UIColor(hexStr: "#F2F2F2") /// 背景色 public var backgroundColor = UIColor(hexStr: "#F2F2F2") /// 商品卡片背景色 public var itemBackgroundColor = UIColor(hexStr: "#FFFFFF") /// 文字背景色(文字为主色需要背景时专用) public var textBackgroundColor = UIColor(hexStr: "#22A356") /// 按钮disabled颜色(线条、背景、文字) public var buttonDisabledColor = UIColor(hexStr: "#E6E6E6") /// 智慧物业主色 public var propertyMainColor = UIColor(hexStr: "#2B67FF") public init() { } public init?(map: Map) { } public mutating func mapping(map: Map) { mainColor <- map["mainColor"] auxColor <- map["auxColor"] titleColor <- map["titleColor"] titleAuxColor <- map["titleAuxColor"] subTitleColor <- map["subTitleColor"] contentColor <- map["contentColor"] lineColor <- map["lineColor"] backgroundColor <- map["backgroundColor"] itemBackgroundColor <- map["itemBackgroundColor"] textBackgroundColor <- map["textBackgroundColor"] buttonDisabledColor <- map["buttonDisabledColor"] } } public struct ThemeFont: Mappable { /// public var navBarFont = UIFont.systemFont(ofSize: 18, weight: .bold) /// public var titleFont = UIFont.systemFont(ofSize: 16, weight: .bold) /// public var contentFont = UIFont.systemFont(ofSize: 12, weight: .regular) public var subContentFont = UIFont.systemFont(ofSize: 10, weight: .regular) public init() { } public init?(map: Map) { } public mutating func mapping(map: Map) { navBarFont <- map["navBarFont"] titleFont <- map["titleFont"] contentFont <- map["contentFont"] subContentFont <- map["subContentFont"] } }