【问题标题】:I want to convert String to UIColor我想将字符串转换为 UIColor
【发布时间】:2019-12-31 15:39:30
【问题描述】:

我正在学习 ColorPickerView。

这是我想做的: 1.将获取的颜色保存为字符串在userdefault中。 (用于传递到另一个视图) 2.在另一个视图中,我想检索存储在userdefault中的颜色字符串并将其返回给UIColor → 2 不起作用。

当您在控制台上打印时 “UIExtendedSRGBColorSpace 1 0.34895 0.297971 1” 以格式显示。

从这种格式返回到 UIColor 的方法不起作用。 有没有办法得到红蓝绿的 alpha 值?

从颜色选择器中获取颜色

func colorPickerViewController(colorPickerViewController: AMColorPickerViewController, didSelect color: UIColor) {

            //userdefault
            ud.set("\(color)", forKey: "color")
            print("\(color)")

    }

将保存的颜色显示回 UIColor

textcolor = ud.object(forKey: "color")
//!!I don't know the color specification here
label.textColor = ・・・・・

【问题讨论】:

标签: ios swift uicolor


【解决方案1】:

UIColor符合NSSecureCoding,所以你可以写UserDefaults的扩展

extension UserDefaults {
    func color(forKey key: String) -> UIColor? {
        guard let colorData = data(forKey: key) else { return nil }
        if #available(iOS 11, *) {
            return try? NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
        } else {
            return NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
        }
    }

    func set(_ color: UIColor, forKey key: String) {
        let data : Data
        if #available(iOS 11, *) {
            data = try! NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: false)
        } else {
            data = NSKeyedArchiver.archivedData(withRootObject: color)
        }
        set(data, forKey: key)
    }
}

try! 表达式不会崩溃,因为color 参数是非可选的,并且UIColor 确实符合NSSecureCoding


旁注:

Anbu.Karthik 的评论提出了相同的方法,但链接文章中的代码很麻烦,并且包含一些不良做法。

【讨论】:

  • 感谢您的建议!我尝试了这个来源并解决了它。我学到了很多!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 2020-02-23
  • 2012-08-06
  • 2021-06-04
  • 2020-06-21
  • 1970-01-01
  • 2017-05-04
相关资源
最近更新 更多