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英寸的

2013-8-9练习[多种方法制作一个计时器]_第1张图片

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

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

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

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

MyTel:13262983383

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


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