微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift - 使用UIDatePicker实现倒计时功能

如果使用UIDatePicker时将模式设置为CountDownTimer,即可让该控件作为倒计时器来使用。效果图如下:


下面是代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import UIKit
class ViewController : UIViewController {
var ctimer: UIDatePicker !
btnstart: UIButton !
leftTime: Int = 180
alertView: UIAlertView !
timer: NSTimer !
override func viewDidLoad() {
super .viewDidLoad()
ctimer = (frame: CGRectMake (0.0,120.0,200.0,200.0))
self .ctimer.datePickerMode = UIDatePickerMode . CountDownTimer ;
//必须为 60 的整数倍,比如设置为100,值自动变为 60
.ctimer.countDownDuration = NSTimeInterval (leftTime);
ctimer.addTarget( ,action: "timerChanged" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,forControlEvents: UIControlEvents ValueChanged )
.view.addSubview(ctimer)
btnstart = (type: . System )
btnstart.frame = CGRect (x:100,y:400,width:100,height:100);
btnstart.setTitleColor( UIColor .redColor(),forState: UIControlState normal )
.greenColor(),147)!important">disabled )
btnstart.setTitle( "开始" )
"倒计时中" )
btnstart.clipsToBounds = true ;
btnstart.layer.cornerRadius = 5;
btnstart.addTarget( "startClicked:" ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,
forControlEvents: TouchUpInside )
.view.addSubview(btnstart)
}
timerChanged()
{
print ( "您选择倒计时间为:\(self.ctimer.countDownDuration)" )
}
/**
*开始倒计时按钮点击
*/
startClicked(sender: )
{
.btnstart.enabled = false ;
// 获取该倒计时器的剩余时间
leftTime = ( .ctimer.countDownDuration);
// 禁用UIDatePicker控件和按钮
.ctimer.enabled = ;
// 创建一个UIAlertView对象(警告框),并确认,倒计时开始
alertView = ()
alertView.title = "到计时开始"
alertView.message = "倒计时开始,还有 \(leftTime) 秒..."
alertView.addButtonWithTitle( "确定" )
// 显示UIAlertView组件
alertView.show()
// 启用计时器,控制每秒执行一次tickDown方法
timer = .scheduledTimerWithTimeInterval( (1),
target: ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,selector: Selector "tickDown" ),
userInfo: nil ottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.5em!important; margin:0px!important; overflow:visible!important; padding:1px 0px!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,repeats: )
}
/**
*计时器每秒触发事件
**/
tickDown()
{
"倒计时开始,还有 \(leftTime) 秒..."
// 将剩余时间减少1秒
leftTime -= 1;
// 修改UIDatePicker的剩余时间
(leftTime);
(leftTime)
// 如果剩余时间小于等于0
if (leftTime <= 0)
{
// 取消定时器
timer.invalidate();
// 启用UIDatePicker控件和按钮
;
;
"时间到!"
}
}
}

上面的代码其实还是有个小bug的。
(1) 问题描述:代码中给时间控件添加了个 ValueChanged事件监听响应,目的是想每次选择的时间改变时都会触发打印出时间。但运行会发现,第一次拨动表盘不触发,后面再改变值才会触发。
(2) 解决办法:这个是iOS的bug,我们把设置初始时间代码
1
2
@H_502_683@//必须为 60 的整数倍,比如设置为100,值自动变为 60
self .ctimer.countDownDuration = NSTimeInterval (leftTime);
修改
2
3
dispatch_async(dispatch_get_main_queue(),{
( .leftTime);
})
(如果我们不需要关心值改变事件的话,直接用原来的赋值方法即可。)
原文出自: www.hangge.com 转载请保留原文链接 http://www.hangge.com/blog/cache/detail_548.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐