美文网首页
Swift:使用GCD实现计时器

Swift:使用GCD实现计时器

作者: 闲云悠鹤蝶恋舞 | 来源:发表于2018-01-18 14:30 被阅读301次
    1、在global线程里创建一个时间源
    // 在global线程里创建一个时间源
        let codeTimer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
    
    2、开始Dispatch Timer
    // Dispatch Timer
        fileprivate func startGCDTimer() {
            // 设定这个时间源是每秒循环一次,立即开始
            codeTimer.schedule(deadline: .now(), repeating: .seconds(1))
            // 设定时间源的触发事件
            codeTimer.setEventHandler(handler: {
    
                // 返回主线程处理一些事件,更新UI等等
                DispatchQueue.main.async {
                    self.timerMethod()
                }
            })
            
            // 判断是否取消,如果已经取消了,调用resume()方法时就会崩溃!!!
            if codeTimer.isCancelled {
                return
            }
            // 启动时间源
            codeTimer.resume()
        }
    
    
    3、时分秒之间的转化
     @objc fileprivate func timerMethod() {
            // 秒
            if sec >= 59 {
                sec = 0
                
                // 分钟
                if min >= 59 {
                    min = 0
                    
                    // 时
                    hour = hour + 1
                }else {
                    min = min + 1
                }
                
                //            print("*****秒:\(sec),   分:\(min)")
            }else {
                sec = sec + 1
                //            print("时:\(hour), 分:\(min), 秒:\(sec)")
            }
            
            print("时:\(hour), 分:\(min), 秒:\(sec)")
            textView.text = String(format: "%02d", hour) + "-" + String(format: "%02d", min) + "-" + String(format: "%02d", sec)
        }
    

    调用如下:

    开始

     @IBAction func clickedStartButton(_ sender: UIButton) {
            startGCDTimer() // 开始
        }
    

    暂停

    注:暂停之后,再点击开始,是接着上次暂停进行的开始计时!!!

        @IBAction func clickedStopButton(_ sender: UIButton) {
            codeTimer.suspend() // 暂停
        }
    

    取消

    取消后,再次点击开始也是没有计时的,因为取消代表的是结束计时,而不是暂停!!!

        @IBAction func clickedCancleButton(_ sender: UIButton) {
            codeTimer.cancel() // 取消
        }
    

    相关文章

      网友评论

          本文标题:Swift:使用GCD实现计时器

          本文链接:https://www.haomeiwen.com/subject/ggcwoxtx.html