如何在 0 处停止倒计时? - Swift
How to stop countdown at 0? - Swift
我是 Swift 和 iOS 开发的新手。我正在尝试为特定日期倒计时。
我的 iOS 倒计时应用程序在零后计数为负数。我想停在零。我该如何解决?
let currentDate = Date()
let dateFormatter = DateFormatter()
let userCalendar = Calendar.current
let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer.fire()
}
func printTime()
{
dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss"
let startTime = Date()
let endTime = dateFormatter.date(from: "11/03/18 10:00:00")
let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
尝试更改:
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
至:
if startTime < endTime {
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
} else {
dayLabel.text = "0"
hourLabel.text = "0"
minuteLabel.text = "0"
secondLabel.text = "0"
}
根据您的情况,您可能希望使用 timer.invalidate()
停止计时器,如下所示:
...
var timer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer?.fire()
}
func printTime() {
...
} else {
...
timer?.invalidate()
}
}
let currentDate = Date()
let dateFormatter = DateFormatter()
var timer = Timer()
let userCalendar = Calendar.current
let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer.fire()
}
func printTime()
{
dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss"
let startTime = Date()
let endTime = dateFormatter.date(from: "11/03/18 10:00:00")
let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
if time.day! == 0 && time.hour! == 0 && time.minute! == 0 && time.second! == 0 {timer.invalidate()}
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
}
我是 Swift 和 iOS 开发的新手。我正在尝试为特定日期倒计时。 我的 iOS 倒计时应用程序在零后计数为负数。我想停在零。我该如何解决?
let currentDate = Date()
let dateFormatter = DateFormatter()
let userCalendar = Calendar.current
let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer.fire()
}
func printTime()
{
dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss"
let startTime = Date()
let endTime = dateFormatter.date(from: "11/03/18 10:00:00")
let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
尝试更改:
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
至:
if startTime < endTime {
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
} else {
dayLabel.text = "0"
hourLabel.text = "0"
minuteLabel.text = "0"
secondLabel.text = "0"
}
根据您的情况,您可能希望使用 timer.invalidate()
停止计时器,如下所示:
...
var timer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer?.fire()
}
func printTime() {
...
} else {
...
timer?.invalidate()
}
}
let currentDate = Date()
let dateFormatter = DateFormatter()
var timer = Timer()
let userCalendar = Calendar.current
let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer.fire()
}
func printTime()
{
dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss"
let startTime = Date()
let endTime = dateFormatter.date(from: "11/03/18 10:00:00")
let time = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
if time.day! == 0 && time.hour! == 0 && time.minute! == 0 && time.second! == 0 {timer.invalidate()}
dayLabel.text = "\(time.day!)"
hourLabel.text = "\(time.hour!)"
minuteLabel.text = "\(time.minute!)"
secondLabel.text = "\(time.second!)"
}