2013-8-9练习[多种方法制作一个计时器]

要求:用多中方法实现定时器

ViewController.h:

#import <UIKit/UIKit.h> #import "NSThread+test.h" @interface DXWViewController : UIViewController - (IBAction)clear:(id)sender; - (IBAction)click1:(id)sender; - (IBAction)click2:(id)sender; - (IBAction)click3:(id)sender; @property(retain,nonatomic) IBOutlet NSTimer *timer; @property (retain, nonatomic) IBOutlet UILabel *label; @property(retain,nonatomic) IBOutlet NSThread *thread; - (IBAction)click4:(id)sender;  @end

ViewController.m:

#import "DXWViewController.h" #define START_BUTTON_Tag 1 #define STOP_BUTTON_Tag 2 @interface DXWViewController ()  @end  @implementation DXWViewController  - (void)viewDidLoad {     [super viewDidLoad];     _thread = nil;     //为什么不能初始化的时候给label赋值     //self.label = 0;//初始化 	 }  - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];      }  - (void)dealloc {     [_thread release];     [_timer release];     [_label release];     [super dealloc]; }  //多线程调用 int i=0; BOOL flag = TRUE; -(void)countT {     //i=0;     //self.label.text = [NSString stringWithFormat:@"%i",i];     while(flag)     {         //测试 //        i++; //        NSLog(@"%d",i); //        NSString *str = [NSString stringWithFormat:@"%i",i]; //        NSLog(@"%@",str); //        self.label.text = str; //        [NSThread sleepForTimeInterval:1];         i++;         NSString *str = [NSString stringWithFormat:@"%i",i];         NSLog(@"%@",str);                  self.label.text = str;          //        CGSize size = [self.label.text sizeWithFont:self.label.font]; //        CGRect frame = CGRectMake(self.label.frame.origin.x,self.label.frame.origin.y, size.width,self.label.frame.size.height); //        self.label.frame = frame;         [NSThread sleepForTimeInterval:1];//休眠1秒     } } -(void)write {     NSString *str = [NSString stringWithFormat:@"%i",i];     self.label.text = @"hi"; } //timer调用的函数 -(void)count:(NSTimer *)_timer {     i++;     NSString *str = [NSString stringWithFormat:@"%i",i];     self.label.text = str;     CGSize size = [self.label.text sizeWithFont:self.label.font];     CGRect frame = CGRectMake(self.label.frame.origin.x,self.label.frame.origin.y, size.width, self.label.frame.size.height);     NSLog(@"%i",i);     self.label.frame = frame; } -(void)getSysDate:(NSTimer *)_timer {     /* //倒计时     NSCalendar *calendar = [NSCalendar currentCalendar];     //设置目标时间     NSDateComponents *components = [[NSDateComponents alloc] init];          [components setYear:2012];          [components setMonth:8];          [components setDay:13];          [components setHour:12];          [components setMinute:0];          [components setSecond:0];          NSDate *fireDate = [calendar dateFromComponents:components];//目标时间     //当前时间     NSDate *today = [NSDate date];          unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;          NSDateComponents *d = [calendar components:unitFlags fromDate:today toDate:fireDate options:0];//计算时间差          self.label.text = [NSString stringWithFormat:@"%d天%d小时%d%分%d秒", [d day], [d hour], [d minute], [d second]];//倒计时显示     */          NSDate *date=[NSDate date];     NSDateFormatter *formater=[[[NSDateFormatter alloc] init] autorelease];     //设置日期格式     formater.dateFormat=@"yyyy-MM-dd HH:mm:ss";  //HH大写代表24时制  hh代表12小时制     //把日期变成字符串     NSString *str=[formater stringFromDate:date];          //设置时区     formater.locale=[[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] autorelease];     //把字符串变成日期     //返回的是格林制时间     date=[formater dateFromString:@"2013-05-16 13:40:50"];     NSLog(@"字符串转化成日期是:%@",date);     NSLog(@"%@",str);     self.label.text = str;      }  - (IBAction)clear:(id)sender {     self.label.text = @"0";     i = 0; }  - (IBAction)click1:(id)sender {     UIButton *button = (UIButton *)sender; //    如果是Start则执行start方法     //参数:最后一个参数如果是no则代表计时器执行一次     //_timer = nil;     if (button.tag == START_BUTTON_Tag)     {                      if ([_timer isValid]) {                              }             else{                 _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(count:) userInfo:nil repeats:YES];             }              }     //执行关闭方法     else if (button.tag == STOP_BUTTON_Tag)     {         if (_timer) {                      if ([_timer isValid]) {                 [_timer invalidate];             }         }         //必须要有这一步操作,不然会报错,指针不用的时候就让他置为空         _timer = nil;     } }  - (IBAction)click2:(id)sender {     UIButton *button = (UIButton *)sender;     if(button.tag == START_BUTTON_Tag)     {                      //[NSThread sleepForTimeInterval:1];            // _thread = [[[NSThread alloc] initWithTarget:self selector:@selector(countT) object:nil] autorelease];             //获取一个单例             _thread = [NSThread getThread];             [_thread initWithTarget:self selector:@selector(countT) object:nil];             [_thread start];             flag = TRUE;     }     else if (button.tag == STOP_BUTTON_Tag)     {          if (![_thread isCancelled])         {             [_thread cancel];             flag = FALSE;         }         //一旦不用了以后就要指向为空         _thread = nil;     }      }  -(void)test {     self.label.text = @"1"; } - (IBAction)click3:(id)sender {     UIButton *button = (UIButton *)sender;     if(button.tag == START_BUTTON_Tag)     {         if ([_timer isValid]) {                      }         else{             _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(getSysDate:) userInfo:nil repeats:YES];         }         //怎么调用外面的方法              }     else if(button.tag == STOP_BUTTON_Tag)     {         if (_timer) {                          if ([_timer isValid]) {                 [_timer invalidate];             }         }         //必须要有这一步操作,不然会报错,指针不用的时候就让他置为空         _timer = nil;         //self.label.text = @"0";     } }  - (IBAction)click4:(id)sender {     UIButton *button = (UIButton *)sender;     if(button.tag == START_BUTTON_Tag)     {         self.label.text = @"hi";     }     else if(button.tag == STOP_BUTTON_Tag)     {         self.label.text = @"hello";     }      } @end

xib:

注意要设置成3.5英寸的


放一个label,几组button,分别一一对应,开始和结束

详细源码:http://download.csdn.net/detail/s10141303/5913117

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013               MyQQ:1213250243

MyTel:13262983383

====================== 相互学习,共同进步 ===================


你可能感兴趣的:(ios,多种方法实现一个计时器,IOS计时器)