今天先完成 Timer 的設定然後再結合 Date 的轉換達到倒數的效果
這裡先設 label 中的值為30,先做30秒倒數
由於因為每個 cell中 都有一個倒數的 label ,但是因為 cell 中每一列出現的時候會有時間差,因此在這裡將要出現的 cell 先丟到陣列中,並且等View準備好後一起出現。
var myCoupon = ["1", "2"]
var cells = [TableViewCell]()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myCoupon.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
cell.myCouponPics.image = UIImage(named: myCoupon[indexPath.row] + ".jpg")
cell.myCountDownLabel.text = "30"
cells.append(cell)
return cell
}
等 View 準備好後再一起出現
override func viewDidAppear(_ animated: Bool) {
cells.forEach { cell in
cell.startTimer()
}
因為是練習因此只放了幾筆資料進 cell 中,暫時不考慮多筆資料後因 dequeueReusbale 可能會造成陣列中重複的內容。
在 TableViewCell 的 class 中加入 timer 開始以及 timer 更新的函數
var timer: Timer!
var countdownSeconds = 30
func startTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
}
@objc func updateTimer() {
countdownSeconds -= 1
//到0之後停止倒數
if countdownSeconds == 0 {
timer.invalidate()
}
myCountDownLabel.text = "\(countdownSeconds)"
}