2016-02-15 23 views
1

我一直在研究一個應用程序,允許用戶通過輕觸按鈕來切換UIImageView圖像。更具體地說,我保存了兩個圖像,當你按下按鈕時,UIImageView圖像會改變。對於那件事我沒有任何疑問。問題是,當我關閉應用程序時,圖像重置爲最初設置爲初始UIImageView圖像的圖像。更改UIImageView圖像並使用NSUserDefaults保存它

我想知道,有沒有辦法保留上次選擇的圖像?換句話說:

  • 當應用程序啓動時,圖像設置爲image1。
  • 用戶按下按鈕,圖像更改爲鏡像2
  • 用戶關閉應用程序,並重新打開它,圖像2仍然是背景,除非用戶再次輕按按鈕

這裏是我到目前爲止的代碼:

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

} 

回答

2

您可以將所選圖像中的幾種方式保存。一種是在視圖退出或用戶更改圖像時,將圖像名稱保存在用戶默認值中。

這裏是如何當用戶改變圖像保存:

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

} 

這是這樣做只是爲了設置你的方向只是其中一種方法。

+1

哈哈,在打字時輸入了很多答案。 – kRiZ

+0

是的,我嘗試了所有這些。這是我最瞭解的一個,因爲你最上面的小解釋。由於我在bg1的故事板中有UIImageView,所以你的答案對我有幫助。謝謝! (: –

+0

很高興我可以幫忙:)快樂的編碼 – kRiZ

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

更好的選擇是保存在NSUserDefaultsBoolean而不是整個圖像。

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

希望這有助於!

+0

將一個設置爲true時,您必須將另一個設置爲false。或者只需使用一個鍵並設置爲true或false。您目前的解決方案將導致兩個開關都爲真,並且始終設置爲點亮bg。 – kRiZ

+0

@kRiZ哎呀!忘記!感謝您的建議。我已經更新了代碼 –

2

第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") 


}