秒表功能实现

秒表要实现的功能描写叙述:下方灰色背景的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:这里面有非常多測试代码。且看且珍惜吧~
写程序的时候喜欢写非常多凝视,据说专业的程序猿都非常少写凝视,真的吗?快被自己蠢哭了~ 明天周末啊~

时间: 2024-10-16 20:55:16

秒表功能实现的相关文章

shell脚本实现秒表功能

#!/bin/bash M1=0 M2=0 S1=0 S2=0 while true do NUM=$(echo "${M1}${M2}:$S1$S2") echo -ne "\033[32m $NUM\b\r\033[0m" (( S2++ )) if [ $S2 -ge 10 ];then (( S1++ )) S2=0 fi if [ $S1 -ge 6 ];then (( M2++ )) S1=0 fi if [ $M2 -ge 10 ];then (( M

多功能时钟应用

近几天做了个多功能时钟,分享一下 主界面 对应的代码: MainActivity.java package com.example.clock; import android.app.Activity; import android.os.Bundle; import android.widget.TabHost; public class MainActivity extends Activity { private TabHost tabHost; @Override protected v

java秒表

在java中实现秒表功能可以直接使用apache commons lang项目中的StopWatch类,它有几个常用的API start()  开始计时 stop()  结束计时 suspend()  暂停 resume() 恢复 reset() 重置秒表 getTime() 获取从开始计时到当前时间之间间隔的毫秒数

JavaScript倒计时脚本

JavaScript倒计时在Web中用得非常广泛,比如常见的团购啊.还有什么值得期待的事情,都可以用到倒计时.现在举了四个例子,比如时间长的倒计时,小时倒计时,最简的倒计时,还有秒表等等,应该可以满足大部分需求.郸城县殳海环保 1. 比较长时间的倒计时 离2015年还有: 01 <script type="text/javascript">   02 startclock(); 03 var timerID = null;   04 var timerRunning = f

软件测试中的冲突测试

转自:http://www.51testing.com/html/54/n-247254.html 摘要:本文介绍了我们公司内部的一种测试方法——冲突测试的含义,并就冲突测试在我司使用范围.冲突测试用例的设计方法等做了简单的介绍. 关键词:冲突测试 1.什么是冲突测试 冲突测试是我们公司内部的一种叫法,可能不同的公司叫法不同.我们公司所谓的冲突测试是指,在运行某一程序的功能时被第三方功能或者软件给干扰的测试.该测试方法模拟的是一种基于软件状态场景的测试.从软件的运行状态来看,我们认为软件状态一般

使用VLC Activex插件做网页版视频播放器

网上找的一个小例子,包括时长播放时间等等都有. mrl可以设置本地文件,这样发布网站后只能播放本地有的文件, 如果视频文件全在服务器上,其他电脑想看的话,则可以IIS上发布个视频文件服务器,类似http://192.168.1.1:8000/video/1.flv 这样可以访问到视频文件,然后这个http路径可以设置为mrl但这样的话经测试支持的格式不多,flv是可以的 测试可以使用 使用vlc播放器播放rtsp视频 这里的打开网络串流看能不能正常播放,如果播放不了,即使视频文件可以访问到这个插

PyQt5信号、定时器及多线程

信号 信号是用于界面自动变化的一个工具,原理是信号绑定了一个函数,当信号被触发时函数即被调用 举个例子 from PyQt5 import QtWidgets,QtCore from untitled import Ui_Form import time class MyWindow(QtWidgets.QWidget,Ui_Form): _signal=QtCore.pyqtSignal(str) #定义信号,定义参数为str类型 def __init__(self): super(MyWin

【得到每天听本书】开口就能说重点-极简君解读

这本书就是教我们"如何在最短的时间,把最重要的事情说明白". 1.一个简单的训练法:一分钟训练法. 一分钟训练法主要就是提升信息概括能力,从结论说起!需要的工具分别是三色圆珠笔.秒表以及一个录音设备. 用红色笔写下这个主题讲话的关键字,用蓝色笔对必须要说的内容进行标注,绿色则标注你觉得有趣的部分.同时,也可以做一个结构性的时间分配,1分钟可以分为3个20秒,或者4个15秒,分别来讲述不同的部分. 一分钟训练注意三点:严格计时客观反映自己一分钟输出能力:发声练习避免脑中意识模糊不清:对录

VMware Horizon 7新功能--即时克隆探索

一:即时克隆介绍 对于即时克隆的介绍可查阅VMware中国的官网微信中以下文章 http://mp.weixin.qq.com/s?__biz=MjM5MDcyNjM4MQ==&mid=402783126&idx=1&sn=79d224a2709e1ae834625e37b53b672d&scene=4#wechat_redirect 以下内容均为摘抄该文章的部分介绍 即时交付功能最早是在2014年的 VMworld 大会上预演的,当时 EUC 部门的 CTO Kit Co