Swift3.0 GCD定时器的使用,实现倒计时,UIDatePicker的使用, 仿写一个活动倒计时的DEMO

前端之家收集整理的这篇文章主要介绍了Swift3.0 GCD定时器的使用,实现倒计时,UIDatePicker的使用, 仿写一个活动倒计时的DEMO前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

直接看主要代码

//截止日期@H_403_7@
let@H_403_7@ endDate = datePicker.date
//开始日期@H_403_7@
let@H_403_7@ startDate = Date()
//时间间隔@H_403_7@
let@H_403_7@ timeInterval:TimeInterval = endDate.timeIntervalSince(startDate)

if@H_403_7@ timer == nil {
    //剩余时间@H_403_7@
    var timeout = timeInterval
    if@H_403_7@ timeout != 0@H_403_7@ {

        //创建全局队列@H_403_7@
        let@H_403_7@ queue = DispatchQueue.global()
        //在全局队列下创建一个时间源@H_403_7@
        timer = DispatchSource.makeTimerSource(flags: [],queue: queue)
        //设定循环的间隔是一秒,并且立即开始@H_403_7@
        timer?.scheduleRepeating(wallDeadline: DispatchWallTime.now(),interval: .seconds(1@H_403_7@))
        //时间源出发事件@H_403_7@
        timer?.setEventHandler(handler: {
            //必须是当前日期往后的日期,在datePicker上也做了限制@H_403_7@
            if@H_403_7@ timeout <= 0@H_403_7@ {
                self@H_403_7@.timer?.cancel()
                self@H_403_7@.timer = nil
                DispatchQueue.main.async(execute: {
                    self@H_403_7@.day.text = "00"@H_403_7@
                    self@H_403_7@.hour.text = "00"@H_403_7@
                    self@H_403_7@.minute.text = "00"@H_403_7@
                    self@H_403_7@.second.text = "00"@H_403_7@
                })
            } else@H_403_7@ {
                //计算剩余时间@H_403_7@
                let@H_403_7@ days = Int(timeout) / (3600@H_403_7@ * 24@H_403_7@)
                if@H_403_7@ days == 0@H_403_7@ {
                    self@H_403_7@.day.text = ""@H_403_7@
                }
                let@H_403_7@ hours = (Int(timeout) - Int(days) * 24@H_403_7@ * 3600@H_403_7@) / 3600@H_403_7@
                let@H_403_7@ minutes = (Int(timeout) - Int(days) * 24@H_403_7@ * 3600@H_403_7@ - Int(hours) * 3600@H_403_7@) / 60@H_403_7@
                let@H_403_7@ seconds = Int(timeout) - Int(days) * 24@H_403_7@ * 3600@H_403_7@ - Int(hours) * 3600@H_403_7@ - Int(minutes) * 60@H_403_7@
                //主队列中刷新UI@H_403_7@
                DispatchQueue.main.async(execute: {
                    if@H_403_7@ days == 0@H_403_7@ {
                        self@H_403_7@.day.text = "0"@H_403_7@
                    } else@H_403_7@ {
                        self@H_403_7@.day.text = "\(days)"@H_403_7@
                    }
                    if@H_403_7@ hours < 10@H_403_7@ {
                        self@H_403_7@.hour.text = "0"@H_403_7@ + "\(hours)"@H_403_7@
                    } else@H_403_7@ {
                        self@H_403_7@.hour.text = "\(hours)"@H_403_7@
                    }
                    if@H_403_7@ minutes < 10@H_403_7@ {
                        self@H_403_7@.minute.text = "0"@H_403_7@ + "\(minutes)"@H_403_7@
                    } else@H_403_7@ {
                        self@H_403_7@.minute.text = "\(minutes)"@H_403_7@
                    }
                    if@H_403_7@ seconds < 10@H_403_7@ {
                        self@H_403_7@.second.text = "0"@H_403_7@ + "\(seconds)"@H_403_7@
                    } else@H_403_7@ {
                        self@H_403_7@.second.text = "\(seconds)"@H_403_7@
                    }
                })
                timeout -= 1@H_403_7@
            }
        })
        //启动时间源@H_403_7@
        timer?.resume()
    }
}

DEMO效果

DEMO下载地址

猜你在找的Swift相关文章