秒表要实现的功能描写叙述:下方灰色背景的view上有两个button-開始/停止button和 计次button。点击開始button,中间的大时钟開始计时,这时点击计次button。右上角的小时钟会把此刻的瞬时时间记录下来。同一时候在以下的tableView上也会显示。

点击停止button会把右上角的小时钟,中间的大时钟清零。同一时候,以下的tableView也会清空。


效果图例如以下:


秒表功能实现_ide    秒表功能实现_ico_02   秒表功能实现_ide_03


详细代码实现:


#import "MiaoBiaoViewController.h"

#define kW self.view.frame.size.width

#define kH self.view.frame.size.height

int count=0;

@interface MiaoBiaoViewController ()

{

   NSTimer * _timer;  //定时器

   NSInteger _seconds;

}

//開始暂停button

@property (nonatomic,weak) UIButton * ssButton;

//计次button

@property (nonatomic,weak) UIButton * jcButton;

//右上角计次时间

@property (nonatomic,weak) UILabel * conLabel;

//中间秒表

@property (nonatomic,weak) UILabel * ctLabel;

//以下的每次记录的时间

@property (nonatomic,weak) UITableView * tableView;

//

@property (nonatomic,weak) UITableViewCell * cell;

//存放记录的数组

@property (nonatomic,strong) NSMutableArray * jcArray;

@end

@implementation MiaoBiaoViewController

#pragma mark - 懒载入

- (NSMutableArray *)jcArray

{

   if (_jcArray==nil)

    {

        _jcArray=[NSMutableArray array];

    }

    return  _jcArray;

}

#pragma mark - 入口

- (void)viewDidLoad {

    [super viewDidLoad];

    

    [self _loadViews];

}

- (void) _loadViews

{

   self.title=@"秒表";

    //小时钟---一直计时

   UILabel * conLabel=[[UILabel alloc]initWithFrame:CGRectMake(267, 65, 110, 50)];

    //conLabel.backgroundColor=[UIColor redColor];

    conLabel.text=@"00:00.00";

    conLabel.font=[UIFontfontWithName:nil size:25];

   self.conLabel=conLabel;

    [self.viewaddSubview:conLabel];

    

   //秒表

    UILabel * ctLabel=[[UILabel alloc]initWithFrame:CGRectMake(0,110,kW,150)];

    //ctLabel.backgroundColor=[UIColor redColor];

    ctLabel.text=@"00:00.00";

    ctLabel.textAlignment=NSTextAlignmentCenter;

    ctLabel.font=[UIFontfontWithName:nil size:75];

   self.ctLabel=ctLabel;

    [self.viewaddSubview:ctLabel];

    

    //下方视图

    UIView * bView=[[UIView alloc]initWithFrame:CGRectMake(0,230,kW,140)];

    bView.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.1];

    

    [self.viewaddSubview:bView];

    

    //NSLog(@"%f",bView.frame.origin.y);

    

    //開始停止button

   UIButton * ssButton=[[UIButton alloc]initWithFrame:CGRectMake((kW-200)/3, 20, 100, 100)];

    ssButton.backgroundColor=[UIColorwhiteColor];

    ssButton.layer.cornerRadius=50;

    [ssButton setTitle:@"開始" forState:UIControlStateNormal];

    [ssButton setTitle:@"停止" forState:UIControlStateSelected];

    [ssButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

    [ssButton setTitleColor:[UIColor grayColor] forState:UIControlStateSelected];

    

    ssButton.tag=1;

    [ssButton addTarget:self action:@selector(StartStop:) forControlEvents:UIControlEventTouchUpInside];

   self.ssButton=ssButton;

    [bViewaddSubview:ssButton];

    

    

    //计次button

   UIButton * jcButton=[[UIButton alloc]initWithFrame:CGRectMake(((kW-200)/3)*2+100, 20, 100, 100)];

    jcButton.backgroundColor=[UIColorwhiteColor];

    jcButton.layer.cornerRadius=50;

    [jcButton setTitle:@"计次" forState:UIControlStateNormal];

    [jcButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

    [jcButton addTarget:self action:@selector(CountNum) forControlEvents:UIControlEventTouchUpInside];

   self.jcButton=jcButton;

    [bViewaddSubview:jcButton];

    

    //点击计次button时记录的每次时间,存放到相应的cell上

    UITableView * tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 370, kW, kH-370-60) style:UITableViewStylePlain];

    tableView.rowHeight=50;

    tableView.delegate=self;

    tableView.dataSource=self;

   self.tableView=tableView;

    [self.viewaddSubview:tableView];

}

#pragma mark - ssButtonbutton的点击事件

- (void)StartStop:(UIButton *) button

{

    button.selected = !button.selected;

   if(_timer==nil)

    {

        //每隔0.01秒刷新一次页面

        _timer=[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(runAction) userInfo:nil repeats:YES];

        [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

        NSLog(@"開始计时.....");

    }

   else

    {

        [_timerinvalidate];   //让定时器失效

       _timer=nil;

       _ctLabel.text=@"00:00.00";

       _conLabel.text=@"00:00.00";

       _seconds=0;

       self.cell=nil;

       self.jcArray=nil;

        [self.tableViewreloadData];

        NSLog(@"计时停止.....");

    }

    

    //方法二

   /*

//    if (button.selected==1)

//    {

//        NSLog(@"開始计时.....");

//       

//    }

//    else

//    {

//        NSLog(@"计时停止.....");

//      

//    }

     */

    

}

#pragma mark - runAction

- (void) runAction

{

    _seconds++;

    //动态改变開始时间

   NSString * startTime=[NSString stringWithFormat:@"%02li:%02li.%02li",_seconds/100/60%60,_seconds/100%60,_seconds%100];

   _ctLabel.text=startTime;

    

}

#pragma mark - 计次

- (void)CountNum

{

   count++;

    _conLabel.text=_ctLabel.text;

   // NSLog(@"这是记录的第**** %i ****个时间数据: %@",count,_conLabel.text);

    [self.jcArray addObject:_conLabel.text];

//    NSLog(@"%@",self.jcArray);

    

    [self.tableView reloadData];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    return self.jcArray.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

   static NSString * identy=@"JRTable";

    UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:identy];

   if (cell==nil)

    {

        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy];

        //添加label

//        UILabel * cellLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, kW, tableView.rowHeight)];

//        cellLabel.text=self.jcArray[indexPath.row];

//        cellLabel.textAlignment=NSTextAlignmentCenter;

//        [cell.contentView addSubview:cellLabel];

    }

     //NSLog(@"%@",self.jcArray[indexPath.row]);

    cell.textLabel.text =self.jcArray[indexPath.row];

    cell.textLabel.textAlignment=NSTextAlignmentCenter;

   self.cell=cell;

    return  self.cell;

}

@end




    PS:这里面有非常多測试代码。且看且珍惜吧~写程序的时候喜欢写非常多凝视,据说专业的程序猿都非常少写凝视,真的吗?快被自己蠢哭了~ 明天周末啊~