效果图如下:

可以通过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 =

2、创建datepicker,并绑定响应方法,可以进行倒计时时间的改变,默认初始是60s

func creatPicker(){
datePicker.frame = CGRect(x:,y:,width:kScreenWidth-,height:)
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:,y:,width:kScreenWidth-,height:)
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: , target: self, selector: #selector(clickDown), userInfo: nil, repeats: true) }

4、实现倒计时的响应方法

func clickDown(){
labels.text = "倒计时开始,还有\(leftTimes)s"
alertCon.message = "倒计时开始,还有\(leftTimes)s"
// 剩余时间少一秒
leftTimes -=
datePicker.countDownDuration = TimeInterval(leftTimes) if leftTimes <= {
// 取消定时器
hTimers.invalidate()
// 改变UIDatePicker和UiButton,还有UILabel的状态
datePicker.isEnabled = true
myBtn.isEnabled = true
labels.text = "倒计时结束"
alertCon.message = "时间到!"
} }

这样就完成了!

swift - 利用UIDatePicker实现定时器的效果的更多相关文章

  1. 利用div实现遮罩层效果

    利用div实现遮罩层效果就是利用一个全屏.半透明的div遮住页面上其它元素,典型的例子就是百度的登录界面.下面贴出示例代码: <!DOCTYPE html> <html> &l ...

  2. 利用MARQUEE实现正在处理效果

    ASP.NET服务器端事件利用MARQUEE实现正在处理效果   前言:ASP.NET同仁们应该都遇到过当触发一个比较耗时的服务器端事件时,页面会处在一个等待的状态(即假死状态),用户体验非常不好,很 ...

  3. Swift - 用CATransform3DMakeRotation实现翻页效果

    Swift - 用CATransform3DMakeRotation实现翻页效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // ...

  4. Swift - 多个mask的动画效果

    Swift - 多个mask的动画效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // TranformFadeView.swi ...

  5. Swift - 用UIScrollView实现视差动画效果

    Swift - 用UIScrollView实现视差动画效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoVi ...

  6. Android利用温度传感器实现带动画效果的电子温度计

    概述 Android利用温度传感器实现带动画效果的电子温度计. 详细 代码下载:http://www.demodashi.com/demo/10631.html 一.准备工作 需要准备一部带有温度传感 ...

  7. 我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计

    要想实现带动画效果的电子温度计,需要以下几个知识点: 1.温度传感器相关知识. 2.ScaleAnimation动画相关知识,来进行水印刻度的缩放效果. 3.android:layout_weight ...

  8. 利用GPU实现翻页效果(分享自知乎网)

    https://zhuanlan.zhihu.com/p/28836892?utm_source=qq&utm_medium=social 首发于Runtime 写文章 利用GPU实现翻页效果 ...

  9. 不借助 Javascript,利用 SVG 快速构建马赛克效果

    之前在公众号转发了好友 Vajoy 的一篇文章 -- 巧用 CSS 把图片马赛克风格化. 核心是利用了 CSS 中一个很有意思的属性 -- image-rendering,它可以用于设置图像缩放算法. ...

随机推荐

  1. C10K问题及解决方案

    转载自:http://blog.csdn.net/wangtaomtk/article/details/51811011 1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个 ...

  2. linux 基本配置tab键和显示行号 和中文输入法

    一.仅设置当前用户的Tab键宽度 输入命令:vim ~/.vimrc 然后:set tabstop=4   //我这里将Tab键的宽度设置为4 保存:ctrl+z+z(或:wq!) OK! 二.设置所 ...

  3. 如何用Visual Studio 2013 (vs2013)编写C语言程序

    如何用Visual Studio 2013 (vs2013)编写C语言程序 (2014-05-16 10:58:15)   Visual Studio 2013是一个很强大的软件,但是刚开始用Visu ...

  4. tomcat7和jetty启动的pom.xml配置

    <plugins> <!-- tomcat7 --> <plugin> <groupId>org.apache.tomcat.maven</gro ...

  5. Ubuntu 16.04使用git

    Ubuntu 16.04安装git 安装完RabbitVCS之后,Android studio里git还是没法用,找不到git程序,git命令也找不到,说明没有安装git! sudo apt-get ...

  6. 【C#/WPF】窗体定时自动关闭

    需求:打开WPF项目后,展示3秒钟产品Logo后,进入主界面MainWindow.(类似于安卓应用打开时的闪屏页SplashPage) 思路:在进入MainWindow后新建一个Window窗体,窗体 ...

  7. CentOS 6编译安装yum和配置常用的yum源

    安装环境:VPS,CentOS 6 + devel包 一.安装相应的软件 1.安装python 下载Python源码包 [root@akinlau ~]# wget http://www.python ...

  8. JVM中的垃圾回收

    GC 垃圾回收回收什么 Java的内存分配原理与C/C++不同.C/C++每次申请内存时都要malloc进行系统调用.而系统调用发生在内核空间,每次都要中断进行切换,这须要一定的开销. 而Java虚拟 ...

  9. -27979 LoadRunner 错误27979 找不到请求表单 Action.c(73): Error -27979: Requested form not found

    LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止. 错误现象:Action.c(41): Error -27979: Request ...

  10. 科普Spark,Spark核心是什么,如何使用Spark(1)

    科普Spark,Spark是什么,如何使用Spark(1)转自:http://www.aboutyun.com/thread-6849-1-1.html 阅读本文章可以带着下面问题:1.Spark基于 ...