【问题标题】:storing background images in userdefaults在 userdefaults 中存储背景图像
【发布时间】:2018-11-15 17:34:24
【问题描述】:

我需要能够设置此按钮的背景图像。我需要存储它,以便在应用关闭后背景图像是相同的。

eventsFirstButton.backgroundColor = UIColor(patternImage: UIImage(named: "events")!)

【问题讨论】:

  • 你在哪里设置这个?如果将其放入 viewDidLoad,则不必保存到 UserDefaults。 userdefaults 也不是保存大量数据的地方。
  • 如果用户已完成测试并获得正确答案,则将背景颜色设置为绿色,但如果他们尚未完成测试,则将颜色设置为红色,因此如果颜色为绿色,则显示为绿色他们已经完成了测试,可以再试一次

标签: ios swift userdefaults


【解决方案1】:

你可以保存状态:

正确答案:

UserDefaults.standard.set(true, forKey: "TestAnswer1")
//If the answer is incorrect set to false

加载中:

 if UserDefaults.standard.bool(forKey: "TestAnswer1") {
      view.backgroundColor = UIColor.green
      // or any other logic
 } else {
      view.backgroundColor = UIColor.red
      // or any other logic
 } 

【讨论】:

    【解决方案2】:

    最好将其保存为base64string,您不想将大量值存储到 UserDefaults。

    要编码UIImage,请使用:

    let image = UIImage()
    let data = image.pngData()
    let imageBase64String = data?.base64EncodedString()
    UserDefaults.standard.set(imageBase64String, forKey: "encodedImage")
    

    对于解码和检索UIImage,请使用:

    if let imageBase64String = UserDefaults.standard.value(forKey: "encodedImage"),
        let url = URL(string: String(format:"data:application/octet-stream;base64,%@",imageBase64String))
    {
        do
        {
            let data =  try Data(contentsOf: url) 
            let image = UIImage(data: data)
        }
        catch let error
        {
            print("Error decoding image")    
        }
    }
    

    如果您确实需要在本地保存PNG、JPEG图像,请使用CoreData将它们存储在设备上。

    【讨论】:

    • 不要将图像存储在 UserDefaults 中。这不是它的用途。
    • 为什么存储更大的base64字符串比存储原始图像数据更好?
    • base64 字符串不大于原始图像数据文件。我知道 UserDefaults 不是用于保存图像,我刚刚发布了一个解决方案,并说最好使用 CoreData 存储它们。阅读我的答案。
    【解决方案3】:

    你可以使用UserDefaults来保存你的图片

    保存

    if let image = eventsFirstButton.imageView?.image {
                let imageData = image.pngData()
                UserDefaults.standard.set(imageData, forKey: "imageData")
            }
    

    检索

    if let imageData = UserDefaults.standard.data(forKey: "imageData") {
                print("IMG data: ", imageData)
                // your code here
            }
    

    【讨论】:

    • 不要将图像存储在 UserDefaults 中。这不是它的用途。
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2018-01-28
    • 2022-07-21
    相关资源
    最近更新 更多