Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将经过的时间传递到另一个ViewController_Ios_Swift_Sprite Kit_Elapsedtime - Fatal编程技术网

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

Ios 将经过的时间传递到另一个ViewController,ios,swift,sprite-kit,elapsedtime,Ios,Swift,Sprite Kit,Elapsedtime,我的游戏中有一个很小的计时器,它运行得很好。然而,我正试图找出如何在你死后保存经过的时间,这样我就可以把它带到游戏屏幕上,在屏幕上显示分数和高分 我做了几件累了的事,但似乎都不管用。我猜这是因为游戏结束后,时间不会被保存在任何地方,而是在游戏重新启动时重置为00:00:00 我为这个计时器使用了两个视图控制器。一个叫做秒表,另一个代码在游戏场景中。这是密码 我想把它放入一个标签中,例如: let timeLabel = SKLabelNode(fontNamed: "Planer")

我的游戏中有一个很小的计时器,它运行得很好。然而,我正试图找出如何在你死后保存经过的时间,这样我就可以把它带到游戏屏幕上,在屏幕上显示分数和高分

我做了几件累了的事,但似乎都不管用。我猜这是因为游戏结束后,时间不会被保存在任何地方,而是在游戏重新启动时重置为00:00:00

我为这个计时器使用了两个视图控制器。一个叫做秒表,另一个代码在游戏场景中。这是密码

我想把它放入一个标签中,例如:

    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)*/
秒表,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
}
}

据我所知,在用户点击停止按钮后,您试图保存您的
手表的
elapsedTime
。如果是这种情况,则在
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
类中节省时间,可以在
stopButton
函数中将
savedTime
变量移动到本地变量。

这种方法有效,但它给了我一个奇怪的结果。标签将其显示为:时间:可选(10.526938915252686),而不是-Time:00:10:52@snapbackdev要获取该
字符串
,需要将
时间间隔
转换为
日期
。您可以这样使用它:
elapsedtimelab.text=formatter.string(from:Date(timeIntervalSince1970:savedTime))
。让我知道这是否有效:)太好了,不知道我怎么会忘记,因为我已经用过了。掌心