Ios 更改UIImageView图像并使用NSUserDefaults保存
我一直在开发一个应用程序,它允许用户只需按一下按钮就可以切换UIImageView图像。更具体地说,我保存了两个图像,当您按下按钮时,UIImageView图像会发生更改。我对此没有异议。问题是,当我关闭应用程序时,图像会重置为我最初设置为初始UIImageView图像的图像 我在想,有没有办法保留上次选中的图像?换言之:Ios 更改UIImageView图像并使用NSUserDefaults保存,ios,swift,uiimageview,swift2,nsuserdefaults,Ios,Swift,Uiimageview,Swift2,Nsuserdefaults,我一直在开发一个应用程序,它允许用户只需按一下按钮就可以切换UIImageView图像。更具体地说,我保存了两个图像,当您按下按钮时,UIImageView图像会发生更改。我对此没有异议。问题是,当我关闭应用程序时,图像会重置为我最初设置为初始UIImageView图像的图像 我在想,有没有办法保留上次选中的图像?换言之: 当应用程序启动时,图像被设置为image1 用户按下按钮,图像更改为image2 用户关闭应用程序并重新打开,除非用户再次点击按钮,否则image2仍然是背景 以下是我目
- 当应用程序启动时,图像被设置为image1
- 用户按下按钮,图像更改为image2
- 用户关闭应用程序并重新打开,除非用户再次点击按钮,否则image2仍然是背景
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var backgroundImage: UIImageView!
let lightBG = UIImage(named: "bg1.jpg")
let darkBG = UIImage(named: "bg2.jpg")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func changeBG(sender: AnyObject) {
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
}
else{
backgroundImage.image = lightBG
}
}
}
更好的选择是在
NSUserDefaults
中保存Boolean
,而不是保存整个图像
@IBAction func changeBG(sender: AnyObject) {
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IMAGE_DARK_SET")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "IMAGE_LIGHT_SET")
}
else{
backgroundImage.image = lightBG
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IMAGE_LIGHT_SET")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "IMAGE_DARK_SET")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if NSUserDefaults.standardUserDefaults().boolForKey("IMAGE_LIGHT_SET"){
backgroundImage.image = lightBG
}else if NSUserDefaults.standardUserDefaults().boolForKey("IMAGE_DARK_SET"){
backgroundImage.image = darkBG
}
}
希望这有帮助 更好的选择是在
NSUserDefaults
中保存一个布尔值,而不是整个图像
@IBAction func changeBG(sender: AnyObject) {
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IMAGE_DARK_SET")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "IMAGE_LIGHT_SET")
}
else{
backgroundImage.image = lightBG
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "IMAGE_LIGHT_SET")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "IMAGE_DARK_SET")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if NSUserDefaults.standardUserDefaults().boolForKey("IMAGE_LIGHT_SET"){
backgroundImage.image = lightBG
}else if NSUserDefaults.standardUserDefaults().boolForKey("IMAGE_DARK_SET"){
backgroundImage.image = darkBG
}
}
希望这有帮助 第一步
override func viewDidLoad() {
super.viewDidLoad()
// Initially Check your `NSUserDefaults` key is empty or not
if NSUserDefaults.standardUserDefaults().objectForKey("SaveImage") != nil
{
// If it is not empty , load the `NSUserDefaults` Image
backgroundImage.image = UIImage(named: NSUserDefaults.standardUserDefaults().objectForKey("SaveImage"))
}
else
{
// if above condition is not statisfy load the normal Image
backgroundImage.image = lightBG
}
}
@IBAction func changeBG(sender: AnyObject) {
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
}
else{
backgroundImage.image = lightBG
}
// On your button click , load the last selected Image , thats all
NSUserDefaults.standardUserDefaults().setObject(backgroundImage.image, forKey: "SaveImage")
}
步骤1
override func viewDidLoad() {
super.viewDidLoad()
// Initially Check your `NSUserDefaults` key is empty or not
if NSUserDefaults.standardUserDefaults().objectForKey("SaveImage") != nil
{
// If it is not empty , load the `NSUserDefaults` Image
backgroundImage.image = UIImage(named: NSUserDefaults.standardUserDefaults().objectForKey("SaveImage"))
}
else
{
// if above condition is not statisfy load the normal Image
backgroundImage.image = lightBG
}
}
@IBAction func changeBG(sender: AnyObject) {
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
}
else{
backgroundImage.image = lightBG
}
// On your button click , load the last selected Image , thats all
NSUserDefaults.standardUserDefaults().setObject(backgroundImage.image, forKey: "SaveImage")
}
您可以通过几种方式保存选定的图像。一种是在视图退出或用户更改图像时,在用户默认设置中保存图像的名称
以下是当用户更改图像时如何保存它:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var backgroundImage: UIImageView!
let kBGImageNameKey = "bgImageName"
let lightBG = UIImage(named: "bg1.jpg")
let darkBG = UIImage(named: "bg2.jpg")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let defaults = NSUserDefaults.standardUserDefaults()
if let name = defaults.stringForKey(kBGImageNameKey) {
if (name == "bg1.jpg") {
backgroundImage.image = lightBG
} else {
backgroundImage.image = darkBG
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func changeBG(sender: AnyObject) {
let defaults = NSUserDefaults.standardUserDefaults()
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
defaults.setObject("bg2.jpg", forKey: kBGImageNameKey)
}
else{
backgroundImage.image = lightBG
defaults.setObject("bg1.jpg", forKey: kBGImageNameKey)
}
}
}
这只是一种方法,只是为了给你指明方向。你可以用几种方法保存选定的图像。一种是在视图退出或用户更改图像时,在用户默认设置中保存图像的名称
以下是当用户更改图像时如何保存它:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var backgroundImage: UIImageView!
let kBGImageNameKey = "bgImageName"
let lightBG = UIImage(named: "bg1.jpg")
let darkBG = UIImage(named: "bg2.jpg")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let defaults = NSUserDefaults.standardUserDefaults()
if let name = defaults.stringForKey(kBGImageNameKey) {
if (name == "bg1.jpg") {
backgroundImage.image = lightBG
} else {
backgroundImage.image = darkBG
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func changeBG(sender: AnyObject) {
let defaults = NSUserDefaults.standardUserDefaults()
if(backgroundImage.image == lightBG){
backgroundImage.image = darkBG
defaults.setObject("bg2.jpg", forKey: kBGImageNameKey)
}
else{
backgroundImage.image = lightBG
defaults.setObject("bg1.jpg", forKey: kBGImageNameKey)
}
}
}
这只是一种方法,只是为了让您朝着正确的方向前进。将一个设置为true时,您必须将另一个设置为false。或者只需使用一个键并设置为true或false。您当前的解决方案将在两次切换后都为真,并且将始终设置为亮背景。@kRiZ Oops!忘记谢谢你的建议。我已经更新了代码,当一个设置为真时,你必须将另一个设置为假。或者只需使用一个键并设置为true或false。您当前的解决方案将在两次切换后都为真,并且将始终设置为亮背景。@kRiZ Oops!忘记谢谢你的建议。我已经更新了代码是的,我都试过了。这是我最理解的一个,因为你在顶部的小小解释。因为我在bg1的故事板中有UIImageView,所以您的回答对我很有帮助。非常感谢。(很高兴我能帮上忙。)快乐编码是的,我都试过了。这是我最理解的一个,因为你在顶部的小小解释。因为我在bg1的故事板中有UIImageView,所以您的回答对我很有帮助。非常感谢。(很高兴我能帮上忙)很高兴