2017-10-10 57 views
-1

我正在創建益智遊戲,即使用戶退出應用程序,如何增加,保存和更新分數?但是,我想加入的的UILabel點和成品動畫後增加將分數提高,保存並更新到UILabel

代碼:

class QuestionView: UIViewController { 

    var score = 0 

    func animate(sender: UIButton) { 

     UIView.animate(withDuration: 2, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 6, options: .allowUserInteraction, animations: { [weak self] in 

      sender.transform = .identity 

     }) { (finished) in 

      score += 2 // Must be increase by 2 

     } 

    } 

    func createCoins() { 

     let lblCoins = UILabel() 
     lblCoins.text = "\(score)" 
     self.view.addSubview(lblCoins) 

    } 

} 

回答

0

更新後得分變量,你必須更新lblCoins.text也。 要將數據保存在磁盤上,您可以在設備文檔目錄中寫入文件。 保存每個分數變化的數據。

這會幫助你: http://www.seemuapps.com/read-to-and-write-from-a-text-file-in-swift

程式後從文件中啓動讀取和設置你的分數變量。 例如,您可以在viewDidLoad中執行此操作。

0

我想你問的是如何跟蹤一個值(分數),以便在用戶再次打開應用程序時檢索它。如果是這種情況,那麼你可以使用UserDefaults database。例如,

UserDefaults非常適合存儲少量數據,例如分數或用戶偏好。

以下示例中顯示的synchronize方法調用是可選的:iOS將不時自動進行該調用。但是,如圖所示,您可以手動調用它,以確保您的分數在適當的時候更新。

斯威夫特3.X:

// define a constant String name for the key where the score will be stored 
// (note: this can be any name you want; I randomly chose "scoreKey") 
let scoreKey = "scoreKey" 

// even if the key's value isn't Bool, iOS will return 'false' 
// if the key hasn't been set or 'true' if it has been set 
let scoreKeyExists: Bool = NSUserDefaults.standardUserDefaults().boolForKey(scoreKey) 

// if no value has been set, yet, then set an initial value 
if !scoreKeyExists { 
    NSUserDefaults.standardUserDefaults().setInt(0, forKey: scoreKey) 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

// retrieve the value when needed 
let currentScore = NSUserDefaults.standardUserDefaults().intForKey(scoreKey) 

// set value as needed 
let newScore = 10 
NSUserDefaults.standardUserDefaults().setInt(newScore, forKey: scoreKey) 
NSUserDefaults.standardUserDefaults().synchronize() 

斯威夫特4:

// define a constant String name for the key where the score will be stored 
// (note: this can be any name you want; I randomly chose "scoreKey") 
let scoreKey = "scoreKey" 

// even if the key's value isn't Bool, iOS will return 'false' 
// if the key hasn't been set 
let scoreKeyExists: Bool = UserDefaults.standard.bool(forKey: scoreKey) 

// if no value has been set, yet, then set an initial value 
if !scoreKeyExists { 
    UserDefaults.standard.set(0, forKey: scoreKey) 
    UserDefaults.standard.synchronize() 
} 

// retrieve the value when needed 
let currentScore = UserDefaults.standard.int(forKey: scoreKey) 

// set value as needed 
let newScore = 10 
UserDefaults.standard.set(newScore, forKey: scoreKey) 
UserDefaults.standard.synchronize() 

而且,爲了在finish關閉期間更新您的標籤,你需要讓你的標籤一個全局變量就像你的分數。

您可以通過Interface Builder將它添加爲IBOutlet。查看本教程以獲得如何使用Connect the UI to Code的示例。

+0

請問什麼是'scoreKey'? –

+0

'UserDefaults'是一個包含鍵值對的字典。爲了存儲和檢索一個值,你需要發明一個'String'類型的鍵名。 'scoreKey'是我爲儲存樂譜的關鍵所發明的名稱。 (我忘了在我的答案中包含那個定義,所以我現在會更新它。) – leanne

+0

還要注意,我要說明的是,我給出的例子並不一定都是一致的。例如,您可以將密鑰名稱設置爲全局常量。然後,您可以在需要檢索密鑰值的任何位置使用它。例如,在使用它之前,你會檢查密鑰是否存在,或者如果你打算在首次玩遊戲時設置初始值,那麼你的應用程序將啓動。然後,在需要的地方設置或檢索值,以便遊戲正常工作。 – leanne

0

這是我的解決:

func animate(sender: UIButton) { 

    UIView.animate(withDuration: 2, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 6, options: .allowUserInteraction, animations: { [weak self] in 

     sender.transform = .identity 

    }) { (finished) in 

     score += 2 
     lblScoreCoins.text = String(score) 
     UserDefaults.standard.set(lblScoreCoins.text, forKey: "Key") 

    } 

}