我正在使用 Swift 3 在 Xcode 中制作我的第一个应用程序,我在制作计时器方面遇到了一些挑战。到目前为止,我有一个可以倒计时并可以重置为预定义时间的应用程序。我的下一步是让用户使用单次向上滑动来调整开始时间以向计时器添加秒数,向下滑动以从计时器中删除秒数。
到目前为止我的代码:
import UIKit
class StopWatchViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.timerLabel.text = timeString(time: TimeInterval(seconds))
}
var seconds = 180 //This is start time in seconds 180 = 3mins
var timer = Timer()
var isTimerRunning = false
func updateTimer() {
if seconds < 2 {
timer.invalidate()
self.timerLabel.text = "Stop!"
} else {
seconds -= 1
timerLabel.text = timeString(time: TimeInterval(seconds))
}
}
func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(StopWatchViewController.updateTimer)), userInfo: nil, repeats: true)
isTimerRunning = true
}
func singleTapped(_ sender: UITapGestureRecognizer) {
//Start Timer
if isTimerRunning == false {
runTimer()
}
}
func timeString(time:TimeInterval) -> String {
let minutes = Int(time) / 60 % 60
let seconds = Int(time) % 60
return String(format:"%02i:%02i", minutes, seconds)
}
func longPress(_ sender: UILongPressGestureRecognizer) {
//Pause
if isTimerRunning == true {
timer.invalidate()
isTimerRunning = false
}
}
func doubleTapped(_ sender: UITapGestureRecognizer) {
//Double Tap Reset
timer.invalidate()
seconds = 180
timerLabel.text = timeString(time: TimeInterval(seconds))
isTimerRunning = false
}
func addsecond() {
if isTimerRunning == false {
//timer plus second
timerLabel.text = timeString(time: TimeInterval(seconds)+1)
}
}
func singleSwipeUp(_ sender: UISwipeGestureRecognizer) {
//Add seconds using swipe up
timer.invalidate()
addsecond()
}
}
这可以用作具有预定义时间(3 分钟)的计时器,但不允许用户使用上下滑动来调整时间。目前它只会在显示中增加一秒,但这不会影响未激活的计时器,一旦它重新启动。我主要是在寻找函数 addsecond 的提示。
最佳答案
您有一个变量 seconds
,您可以使用它来跟踪计时器何时完成,并显示到您的 timerLabel 中。
您的 singleSwipeUp(_:)
调用 addSecond()
,这会更改 timerLabelText
,但不会更改 seconds
实际控制计时器的变量。
(您应该遵循使用 lowerCamelCase 命名函数的 swift 约定,其中第一个字母为小写,函数名称中每个后续单词的开头均为大写,因此 addsecond()
应该改名为 addSecond()
。
类名和类型应该以 UpperCamelCase 命名,其中名称中的所有单词都大写,包括第一个字母。)
重写addSecond()
如下:
func addsecond() {
if isTimerRunning == false {
//Increment seconds, then install the new value in timerLabel
seconds += 1
timerLabel.text = timeString(time: TimeInterval(seconds))
}
}
关于ios - 使用 Swift 3 调整/添加定时器输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43462398/