交代一下我做程序的工具:mac os x虚拟机10.9.3         Xcode6         百度^-^         参考书iPhone30天精通



程序介绍:做一个迷你秒表的程序,有开始计时,暂停计时,重新计时(将计时的时间归零)


在按照书上的程序做出来之后发现一个问题,就是多次按开始计时,计时的时间就加快了,即重复调用开始计时的方法,后来上网上查了一下,很多人都有遇到相同的问题,我便借鉴了一下别人的博客,利用了两个条件语句解决了这一问题,参考:http://sinno.blog.163.com/blog/static/2156171902013092625208/   完全可以看下面的博文不用看参考资料。


程序贴出来,同时注解在程序上面。

//  ViewController.h
 //  10
 //
 //  Created by 李迪 on 15-7-27.
 //  Copyright (c) 2015年 李迪. All rights reserved.
 //

 #import <UIKit/UIKit.h>
 #import<Foundation/Foundation.h>
 @interface ViewController : UIViewController{
     IBOutlet UILabel * time;
     NSTimer * timer;
 }
 @property UILabel *time;
 @property NSTimer *timer;

 -(IBAction)start;

 -(IBAction)stop;

 -(IBAction)reset;

 -(void)showAct;

 @end//  ViewController.m
 //  10
 //
 //  Created by 李迪 on 15-7-27.
 //  Copyright (c) 2015年 李迪. All rights reserved.
 //

 #import "ViewController.h"

 @interface ViewController ()
             

 @end



@implementation ViewController

 @synthesize time,timer;

 -(IBAction)start{//计时器当然是要从0开始查了,我在viewDidLoad里面让label.text初始值为0,在reset里也让它的值为0
     if(!timer)//在.h文件里面只是定义了timer这一属性,但是并没有给timer这一属性赋值,所以timer是一个空值的计时器对象。如果timer
               //对象为空成立,则创建一个相应的timer对象,否则什么也不做。这样就保证了多次按start也不发生加速计时的情况了。
         timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showAct) userInfo:nil repeats:YES];//scheduledTimerWithTimeInterval为对象定义计时的时间间隔属性值,1.0表示1秒
                          //target定义对象执行的目标,“self”代表本体
                          //selector为对象定义时间选择的方法,而showAct是自己定义的一个方法,将数字累加,让结果在label上显示出来
                          //userInfo是用户信息,不需要管
                          //repeats表示定时器是否重复执行,一定要选yes,否则定时器便只查1秒就不再继续查了
 }

 -(IBAction)stop{
     if(timer){//这里的if是和start的if相互呼应的,如果没按start直接按stop便没有意义
         if([timer isValid]){//如果上一个if有意义的话,判断程序本身的timer是否在运行,不运行也同样没有意义
             [timer invalidate];//终止计时器方法
             timer = nil;//与创建一个start相呼应,我在这里让这个对象为空
         }
     }
 }

 -(IBAction)reset{
     time.text = @"0";
 }

 -(void)showAct{//前面所调用的方法,即累加器+显示器
     int currentTime = [time.text intValue];
     int newTime = currentTime +1;
     time.text = [NSString stringWithFormat:@"%d",newTime];
 }
             
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view, typically from a nib.
     time.text = @"0";
 }

 - (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
     // Dispose of any resources that can be recreated.
 }

 @end