将经过的时间传递给另一个ViewController

时间:2018-04-19 14:49:16

标签: ios swift sprite-kit elapsedtime

我的游戏中有一个小的计时器,它运行得很好。但是我想弄清楚如何在你死的时候节省经过的时间,这样我就可以把它带到屏幕上显示得分和高分的游戏。

我厌倦了一些事情,但似乎都没有。我想这是因为当比赛结束时,时间没有被保存到任何地方,而是在比赛重新开始时重置为00:00:00。

我为这个计时器使用两个视图控制器。一个叫做秒表,其他代码在GameScene中。这是代码。

我想将它带入一个标签,例如:

    let timeLabel = SKLabelNode(fontNamed: "Planer")
    timeLabel.text = "Time: \(savedTimer)"
    timeLabel.fontSize = 100
    timeLabel.fontColor = SKColor.white
    timeLabel.zPosition = 2
    timeLabel.position = CGPoint (x: self.size.width/2, y: self.size.height * 0.5)
    self.addChild(timeLabel)*/

Stopwatch.swift代码

import Foundation

class Stopwatch {

private var startTime : Date?

var elapsedTime: TimeInterval {
    if let startTime = self.startTime {
        return -startTime.timeIntervalSinceNow
    } else {
        return 0
    }
}
var isRunning: Bool {
    return startTime != nil
}

func start() {
    startTime = Date()
}

func stop() {
    startTime = nil
}
}

我通过游戏场景加速了代码:

import UIKit

class ViewController: UIViewController {

private let formatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.dateFormat = "mm:ss:SS"
    return formatter
}()

let watch = Stopwatch()

@IBOutlet weak var elapsedTimeLabel: UILabel!

@IBAction func startButton(_ sender: Any) {
    Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(self.updateElapsedTimeLabel), userInfo: nil, repeats: true)

    watch.start()
}

@IBAction func stopButton(_ sender: Any) {
    watch.stop()
}

@objc func updateElapsedTimeLabel (timer : Timer) {
    if watch.isRunning {
        elapsedTimeLabel.text = formatter.string(from: Date(timeIntervalSince1970: watch.elapsedTime))
    } else {
        timer.invalidate()
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override var prefersStatusBarHidden: Bool {
    return true
}
}

1 个答案:

答案 0 :(得分:0)

我的理解是,您尝试在用户点按停止按钮后保存elapsedTime的{​​{1}}。如果是这种情况,请在watch函数中调用stopButton,然后重置watch.stop()。所以你可能想要编辑它:

startTime = nil

如果您不需要在// Create a new class variable to store the time var savedTime: TimeInterval? = nil @IBAction func stopButton(_ sender: Any) { savedTime = watch.elapsedTime // Use the savedTime here to pass to the game over function watch.stop() } 课程中节省时间,可以将ViewController变量移至savedTime函数中的本地变量。