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