zoukankan      html  css  js  c++  java
  • swift

    效果图如下:

    可以通过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,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,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 = "时间到!"
        }
        
    }

    这样就完成了!

  • 相关阅读:
    Maven的pom文件依赖提示 ojdbc6 Missing artifact,需要手动下载并导入maven参考
    Maven全局配置文件settings.xml详解(转)
    SpringBoot -- 项目结构+启动流程
    64匹马,8个赛道,找出前4名最少比赛多少场?——最快10次,最慢11次;
    Spring家族主流成员介绍
    java 中文与unicode互转
    Netty的Marshalling编解码器
    解决svn迁移过程中出现:SVN Error: is not the same repository as的问题
    netty入门实例
    Dubbo的使用及原理
  • 原文地址:https://www.cnblogs.com/hero11223/p/5713643.html
Copyright © 2011-2022 走看看