在 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 中,这样用户就不需要在每次按下“可购买”按钮时恢复购买