效果图如下:
可以通过UIDatePicker调整倒计时的时间,然后点击UIButton开始倒计时,使用NSTimer进行倒计时的时间展示,我是声明了一个label也进行了标记,
然后点击按钮开始倒计时的同时,弹出一个alertview,alertview上展示倒计时的一次递减的效果!结束后,改变下label、button、alertview的title的
显示字样!
具体代码如下:
1、声明所需各类控件
var datePicker = UIDatePicker()
var myBtn = UIButton()
var alertCon = UIAlertController()
var hTimers = Timer()
var labels = UILabel()
var leftTimes:Int = 60
2、创建datepicker,并绑定响应方法,可以进行倒计时时间的改变,默认初始是60s
func creatPicker(){
datePicker.frame = CGRect(x:10,y:64,width:kScreenWidth-20,height:260)
datePicker.backgroundColor = UIColor.yellow
datePicker.locale = Locale(identifier:"zh_CN")
datePicker.addTarget(self, action: #selector(valueChanged), for: .valueChanged)
datePicker.datePickerMode = .countDownTimer
datePicker.setValue(UIColor.red, forKey: "textColor")
self.view.addSubview(datePicker)
}
响应方法的实现:
//时间选择器的响应方法
func valueChanged() {
print("选择倒计时间为-->:\(datePicker.countDownDuration)")
}
3、创建button,并绑定响应方法
func creatDatePicker(){
myBtn.frame = CGRect(x:10,y:300,width:kScreenWidth-20,height:50)
myBtn.setTitle("按钮", for: .normal)
myBtn.setTitle("倒计时中", for: .disabled)
myBtn.backgroundColor = UIColor.orange
myBtn.setTitleColor(UIColor.white, for: .normal)
myBtn.setTitleColor(UIColor.blue, for: .disabled)
myBtn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
self.view.addSubview(myBtn)
}
响应方法的实现,在按钮的响应方法里面绑定NSTimer的响应方法,在点击按钮的时候触发
unc btnClick(){
myBtn.isEnabled = false
// 获取该倒计时的剩余时间
leftTimes = Int(datePicker.countDownDuration)
datePicker.isEnabled = false
// 创建alertcontroller
alertCon = UIAlertController(title:"倒计时开始",message:"倒计时开始,还有\(leftTimes)",preferredStyle:.alert)
let cancel = UIAlertAction(title:"取消",style:.cancel,handler:nil)
let okAction = UIAlertAction(title:"确定",style:.default,handler:nil)
alertCon.addAction(cancel)
alertCon.addAction(okAction)
self.present(alertCon, animated: true, completion: nil)
// 启动定时器
hTimers = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(clickDown), userInfo: nil, repeats: true)
}
4、实现倒计时的响应方法
func clickDown(){
labels.text = "倒计时开始,还有\(leftTimes)s"
alertCon.message = "倒计时开始,还有\(leftTimes)s"
// 剩余时间少一秒
leftTimes -= 1
datePicker.countDownDuration = TimeInterval(leftTimes)
if leftTimes <= 0 {
// 取消定时器
hTimers.invalidate()
// 改变UIDatePicker和UiButton,还有UILabel的状态
datePicker.isEnabled = true
myBtn.isEnabled = true
labels.text = "倒计时结束"
alertCon.message = "时间到!"
}
}
这样就完成了!