更改 UIImageView 图像并使用 NSUserDefaults 保存它

Changing UIImageView image and save it using NSUserDefaults

我一直在开发一个允许用户通过触摸按钮切换 UIImageView 图像的应用程序。更具体地说,我保存了两张图像,当您按下按钮时,UIImageView 图像会发生变化。对于那件事我没有任何疑问。问题是当我关闭应用程序时,图像重置为我最初设置为初始 UIImageView 图像的图像。

我想知道,有没有办法保留上次选择的图像?换句话说:

这是我目前的代码:

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
    }
}

}
@IBAction func changeBG(sender: AnyObject) {

    if(backgroundImage.image == lightBG){
        backgroundImage.image = darkBG
        NSUserDefaults.standardUserDefaults().setObject("bg2.jpg", forKey: "BACKGROUND_IMAGE_NAME")
    }
    else{
        backgroundImage.image = lightBG
        NSUserDefaults.standardUserDefaults().setObject("bg1.jpg", forKey: "BACKGROUND_IMAGE_NAME")
    }

  NSUserDefaults.standardUserDefaults().synchronize()
}

override func viewDidAppear(animated: Bool) {
   super.viewDidAppear(animated)

   var imageName: String = NSUserDefaults.standardUserDefaults().objectForKey("BACKGROUND_IMAGE_NAME")
   if imageName.characters.count != 0 {
      let imgBackGround = UIImage(named: imageName)
      backgroundImage.image = imgBackGround
   }
}

更好的选择是在 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
    }
}

希望对您有所帮助!

第一步

 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)
    }
}

}

这只是为您指明方向的一种方法。