在 userdefaults 中存储背景图像

Posted

技术标签:

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

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

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

【问题讨论】:

你在哪里设置这个?如果将其放入 viewDidLoad,则不必保存到 UserDefaults。 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 中。这不是它的用途。

以上是关于在 userdefaults 中存储背景图像的主要内容,如果未能解决你的问题,请参考以下文章

将 IAP 存储在 UserDefaults 中,这样用户就不需要在每次按下“可购买”按钮时恢复购买

userdefaults 不保存按钮状态

可以在 CSS 背景图像中使用 SVG <use xlink> 吗?

我可以将图像存储在数组中吗?

如果 UserDefaults 为空,如何检查一次

在 UserDefaults 中存储自定义对象数组