Swift 将秒转换为分钟:标签MacOS中的秒
我是一名学校教师,我们被“命令”在上课时使用特定的计时器,low and Seek在我们的苹果iMac上不起作用。我正在尝试在xcode中创建自己的窗口,到目前为止,我已经创建了一个基本窗口,可以在几秒钟内对标签进行倒计时。目前我已经分配了按钮,它们可以工作(以60秒为增量) 这是可行的,但理想情况下,我希望标签显示分钟和秒,而不是(更容易为孩子们)。编写此代码的最佳方法是什么?我上次使用xcode是在2009年,现在我已经过时了!!提前谢谢 -- -- --Swift 将秒转换为分钟:标签MacOS中的秒,swift,xcode,timer,countdown,seconds,Swift,Xcode,Timer,Countdown,Seconds,我是一名学校教师,我们被“命令”在上课时使用特定的计时器,low and Seek在我们的苹果iMac上不起作用。我正在尝试在xcode中创建自己的窗口,到目前为止,我已经创建了一个基本窗口,可以在几秒钟内对标签进行倒计时。目前我已经分配了按钮,它们可以工作(以60秒为增量) 这是可行的,但理想情况下,我希望标签显示分钟和秒,而不是(更容易为孩子们)。编写此代码的最佳方法是什么?我上次使用xcode是在2009年,现在我已经过时了!!提前谢谢 -- -- -- --有很多解决方案。一个方便的方
--有很多解决方案。一个方便的方法是
datecomponentsformter
let formatter : DateComponentsFormatter = {
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .second]
return formatter
}()
@objc func updateTimer() {
seconds -= 1
countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
}
一些改进: 以秒为单位为所有按钮分配标签,例如将
threeMin
按钮的标签设置为180。然后只使用一个iAction
并将所有按钮连接到该操作
在操作中,首先检查计时器是否正在运行,并仅在计时器未运行时启动它
var timer : Timer?
@IBAction func startTimer(_ sender: NSButton) {
if timer == nil {
seconds = sender.tag
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)
}
}
创建一个函数以可靠地停止计时器
func stopTimer() {
if timer != nil {
timer?.invalidate()
timer = nil
}
}
如果seconds
为0,则在updateTimer()函数中停止计时器
@objc func updateTimer() {
seconds -= 1
countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
if seconds == 0 { stopTimer() }
}
嗨,欢迎来到这个网站。如果您添加主语言标记,更多人将看到您的问题。(这是Swift吗?如果是,请在底部的标记框中添加Swift
标记。)欢迎使用堆栈溢出!请添加图像而不是链接。这一次我已经为你做了这件事-请查看更多关于格式化的信息。谢谢你的帮助和建议,我尝试了这张图片,但由于声誉问题,它会允许我。谢谢你整理
var timer : Timer?
@IBAction func startTimer(_ sender: NSButton) {
if timer == nil {
seconds = sender.tag
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)
}
}
func stopTimer() {
if timer != nil {
timer?.invalidate()
timer = nil
}
}
@objc func updateTimer() {
seconds -= 1
countdownLabel.stringValue = formatter.string(from: TimeInterval(seconds))!
if seconds == 0 { stopTimer() }
}