NSTimer的使用之iphone计时器功能模仿

  1 程序运行效果:

1.1程序启动第一个界面,等待用户选择倒计时时间

1.2用户选择好倒计时时间后,开始倒计时

1.3接受用户取消、暂停、继续等中断

  2 设计过程

  2.1 拖出来一个日期拾取器控件,两个按钮,关联属性变量,然后添加辅助属性变量,如下:

 1 @interface ViewController ()
 2
 3 @property (weak, nonatomic) IBOutlet UIDatePicker *timePicker;
 4 @property (weak, nonatomic) IBOutlet UIButton *pauseAndContinueBtn;
 5
 6 @property (weak, nonatomic) UILabel *timerLabel;
 7 @property (weak, nonatomic) NSTimer *countTimer;
 8 @property (assign, nonatomic) NSInteger second;
 9
10 @end

  2.2 开始计时按钮的响应函数为:

 1 - (IBAction)countStart:(UIButton *)countBtn {
 2
 3     if([countBtn.titleLabel.text isEqualToString:@"开始计时"])
 4     {
 5         self.pauseAndContinueBtn.enabled = YES;
 6
 7         UILabel *timeLabel = [[UILabel alloc] init];
 8         timeLabel.frame = self.timePicker.frame;
 9
10         NSInteger second = self.second;
11         timeLabel.text = [NSString stringWithFormat:@"%02ld:%02ld:%02ld",second/3600,second%3600/60,second%60];
12         timeLabel.font = [UIFont systemFontOfSize:48];
13         timeLabel.textAlignment = NSTextAlignmentCenter;
14
15         self.timePicker.alpha = 0.0f;
16         [self.view addSubview:timeLabel];
17
18         self.timerLabel  =timeLabel;
19         [countBtn setTitle:@"取消" forState:UIControlStateNormal];
20
21         self.countTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(countStartSubForUpdateLabelText) userInfo:nil repeats:YES];
22         [[NSRunLoop mainRunLoop] addTimer:self.countTimer forMode:NSRunLoopCommonModes];
23     }
24     else
25     {
26         self.pauseAndContinueBtn.enabled = NO;
27         [self.pauseAndContinueBtn setTitle:@"暂停" forState:UIControlStateNormal];
28
29         [self.timerLabel removeFromSuperview];
30         self.timePicker.alpha = 1.0f;
31
32         [countBtn setTitle:@"开始计时" forState:UIControlStateNormal];
33         [self.countTimer invalidate];
34
35         [self countDown:self.timePicker];
36     }
39 }

  2.3 暂停继续按钮的响应函数为:

 1 - (IBAction)countPause:(UIButton *)pauseBtn
 2 {
 3     if([pauseBtn.titleLabel.text isEqualToString:@"暂停"])
 4     {
 5         [pauseBtn setTitle:@"继续" forState:UIControlStateNormal];
 6         [self.countTimer setFireDate:[NSDate distantFuture]];
 7     }
 8     else
 9     {
10         [pauseBtn setTitle:@"暂停" forState:UIControlStateNormal];
11         [self.countTimer setFireDate:[NSDate distantPast]];
12     }
13 }

  2.4 日期拾取器将界面上用户选择的函数接收,并将结果写到一个存放秒数的属性变量中,代码如下:

 1 - (void)countDown:(UIDatePicker *)timePicker
 2 {
 3
 4     NSDateFormatter *myDate = [[NSDateFormatter alloc] init];
 5     [myDate setDateFormat:@"HH:mm:ss"];
 6     NSString *stringTime = [myDate stringFromDate:timePicker.date];
 7
 8     NSArray *hourAndMin = [stringTime componentsSeparatedByString:@":"];
 9     NSString *stringHour = hourAndMin[0];
10     NSString *stringMin = hourAndMin[1];
11
12     NSInteger hour = stringHour.integerValue;
13     NSInteger min  = stringMin.integerValue;
14     NSInteger second = hour*3600+min*60;
15
16     self.second = second;
17
18 }

  2.5 viewDidLoad函数中的加载内容:

1 - (void)viewDidLoad {
2     [super viewDidLoad];
3
4     self.timePicker.datePickerMode = UIDatePickerModeCountDownTimer;
5     [self.timePicker addTarget:self action:@selector(countDown:) forControlEvents:UIControlEventValueChanged];
6
7     self.pauseAndContinueBtn.enabled = NO;
8 }

  2.6 倒计时label控件内容刷新函数:

1 - (void)countStartSubForUpdateLabelText
2 {
3     self.second--;
4     self.timerLabel.text = [NSString stringWithFormat:@"%02ld:%02ld:%02ld",self.second/3600,self.second%3600/60,self.second%60];
5 }

  3 注意,日期拾取器控件属性设置为倒计时模式。

  4 just have a try,you will find more…

时间: 2024-11-03 21:52:20

NSTimer的使用之iphone计时器功能模仿的相关文章

了解iPhone的功能

幸运的是,iPhone确实为程序员提供了一个相当全面的多指触控系统.它可以同时跟踪多达5个触控(非常方便,恰好可以充分利用整支手),而且会在后台完成大量处理从而向你提供相当简洁的数据以供使用.硬件就像是抽取”接触区":想象一下鼻子压在窗户上时出现的椭圆形状,这种效果就与手指轻击屏幕时很类似.然后,它在这个椭圆中标识一个点来表示触摸点.硬件要负责对一个大手指与两个小手指合在一起的情况加以区分.它还要独立地跟踪每一个触摸,使你能够了解手指触摸屏幕其间做了什么,而不只是由操作系统为你提供一大堆的坐标.

多线程控制工具类--倒计时器CountDownLatch的使用(模仿火箭发射)

package com.thread.test.Lock; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchDemo implements Runnable { static final

NSTimer类的使用

创建一个 Timer + scheduledTimerWithTimeInterval: invocation: repeats: + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti   invocation:(NSInvocation *)invocation   repeats:(BOOL)yesOrNo; + scheduledTimerWithTimeInterval: target: selector: user

IOS问题汇总:2015-1-9 NSTimer类的使用(转)

NSTimer类的使用 创建一个 Timer scheduledTimerWithTimeInterval: invocation: repeats: -(NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo; scheduledTimerWithTimeInterval: target: selector: u

转:SharePoint2013TimerJob计时器发送邮件

SharePoint2013TimerJob计时器发送邮件 眼下正好有一个SP项目需要用到计时器功能,本人平常忘性大,所以学一点记录一点,其中参考了不少网络上的好文章,因为怕麻烦,我就不引用看过的博客的链接了,忘各路大神莫怪. sharepoint 计时器类似于Windows 任务计划一样,可以按分,时,天,周,月去自动执行你布置的任务,你可以到sharepoint 管理中心去查看及更改你的计时规则,值得注意的是,每当你部署一个计时器的时候,你需要到服务器中的"服务"中,有一个叫&qu

iOS开发总结(A0) - NStimer

NStimer是ios开发的计时器,简单易用,但有几个注意事项 1. 创建NStimer的两个常用方法是 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInte

模仿,类比,移植技法(创新技法5)

一.模仿技法:在发明创新过程中,模仿是一种很自然的想法和思路.人虽然具有智慧,但在很多方面与其它生物相比,人本身的能力是比较低的.对于其它生物通过物竞天择而进化来的优势,作为有智慧的人类,理所当然的应该学而致用,模仿是第一步.当然,除了模仿自然事物或现象外,也可以模仿其它产品,甚至模仿人类本身(智能机器人,图像识别等). 模仿包括:形状模仿:不仅用于艺术创想,也可以用于普通产品.象形文字,拱形洞,流线型等.功能模仿:这个非常多,比如鹰眼,声呐等.构造模仿(蜂巢的模仿),材质模仿.防生学等. 山寨

Android应用增加计时器

昨天写的Sudoku游戏需要增加计时器功能,使用Chronometer实现如下,由于Chronometer自己在调用stop之后后台的计时器还会继续增加,所以暂停功能需要额外实现: 在StartActivity onCreate方法中添加如下代码: textView = (TextView) findViewById(R.id.time_text); timer = (Chronometer) findViewById(R.id.chronometer); timer.setBase(Syste

关于iPhone的Tips篇……(to be continued...)

虽说作为一名iOS Developer,相比如何使用手中的iPhone,更重要的还是不断钻研如何去code,不过这里还是想起一篇类似<如何利用好你的iPhone>.<怎样才能榨干你手中iPhone的功能和价值>.<iPhone怎样玩才叫cool才叫更bigger>之类主题的blog,嗯,说写就写,今后还会更新MacBook篇.iPad篇:D 注:以下tips的确原创,如遇雷同,敬请留言吧-欢迎讨论. Tips.zero iOS中的一个功能诸位一定都用过,那就是整理主屏幕