Swift定时器

Swift定时器_第1张图片
Snip20171225_4.png
代码在这

// 定义需要计时的时间
        var timeCount = 60
        // 在global线程里创建一个时间源
        let codeTimer = DispatchSource.makeTimerSource(queue:DispatchQueue.global())
        // 设定这个时间源是每秒循环一次,立即开始
        codeTimer.scheduleRepeating(deadline: .now(), interval: .seconds(1))
        // 设定时间源的触发事件
        codeTimer.setEventHandler(handler: {
            // 每秒计时一次
            timeCount = timeCount - 1
            
           
            // 时间到了取消时间源
            if timeCount <= 0 {
                
                codeTimer.cancel()
            }
            // 返回主线程处理一些事件,更新UI等等
            DispatchQueue.main.async {
                sender.setTitle("\(timeCount)s", for: UIControlState.normal)
            }
        })
        // 启动时间源
        codeTimer.resume()
    }
        
简单使用
Swift定时器_第2张图片
Untit.gif
      override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(composeBtn)
        composeBtn.frame = CGRect(x: 100, y: 100, width: 150, height: 40)
    }
    
    
    fileprivate lazy var composeBtn:UIButton = {
        let btn = UIButton()
        btn.backgroundColor = UIColor.red
        btn.setTitle("获取验证码", for: UIControlState.normal)
        btn.addTarget(self, action: #selector(btnClick(sender:)), for: UIControlEvents.touchUpInside)
        return btn
    }()
    
    func btnClick(sender:UIButton) {
        // Do any additional setup after loading the view, typically from a nib.
        // 定义需要计时的时间
        var timeCount = 60
        // 在global线程里创建一个时间源
        let codeTimer = DispatchSource.makeTimerSource(queue:DispatchQueue.global())
        // 设定这个时间源是每秒循环一次,立即开始
        codeTimer.scheduleRepeating(deadline: .now(), interval: .seconds(1))
        // 设定时间源的触发事件
        codeTimer.setEventHandler(handler: {
            // 每秒计时一次
            timeCount = timeCount - 1
            
            // 返回主线程处理一些事件,更新UI等等
            DispatchQueue.main.async {
                sender.isEnabled = false
                sender.backgroundColor = UIColor.lightGray
                sender.setTitle("\(timeCount)s", for: UIControlState.normal)
            }
            // 时间到了取消时间源
            if timeCount <= 0 {
                DispatchQueue.main.async {
                    sender.isEnabled = true
                    sender.backgroundColor = UIColor.red
                    sender.setTitle("重新获取验证码", for: UIControlState.normal)
                }
                codeTimer.cancel()
            }
         
        })
        // 启动时间源
        codeTimer.resume()
    }

你可能感兴趣的:(Swift定时器)