秒表功能实现

Posted liguangsunls

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了秒表功能实现相关的知识,希望对你有一定的参考价值。

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

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


效果图例如以下:


技术分享   技术分享   技术分享


详细代码实现:



#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=[UIFont fontWithName:nil size:25];

    self.conLabel=conLabel;

    [self.view addSubview: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=[UIFont fontWithName:nil size:75];

    self.ctLabel=ctLabel;

    [self.view addSubview: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.view addSubview:bView];

    

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

    

    //開始停止button

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

    ssButton.backgroundColor=[UIColor whiteColor];

    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;

    [bView addSubview:ssButton];

    

    

    //计次button

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

    jcButton.backgroundColor=[UIColor whiteColor];

    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;

    [bView addSubview: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.view addSubview: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

    {

        [_timer invalidate];   //让定时器失效

        _timer=nil;

        _ctLabel.text=@"00:00.00";

        _conLabel.text=@"00:00.00";

        _seconds=0;

        self.cell=nil;

        self.jcArray=nil;

        [self.tableView reloadData];

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































以上是关于秒表功能实现的主要内容,如果未能解决你的问题,请参考以下文章

用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语

用于秒表实现的 MFC 时间工具

数电实验 数字电子钟设计 基于quartus 实现计时校时闹钟秒表稍复杂音频 分享电路图设计以及工程文件

Qt学习之秒表的实现(StopWatch) (转)

秒表计时器

秒表---框架搭建