iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 7
1

今天先完成 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)"
    }

https://ithelp.ithome.com.tw/upload/images/20171226/20107699vQlhW0Xpkc.png


上一篇
Day 6 - 麥當勞報報 表格
下一篇
Day 8 - 麥當勞報報 取得時間
系列文
Swift 新手上路之30天復刻版型30

1 則留言

0
wgking
iT邦新手 5 級 ‧ 2018-10-08 21:22:40

請問這個是讓他自動報嗎?

我要留言

立即登入留言