相关代码详情见https://github.com/xyh3171/StopwatchFormal.git
搭建计时器工程的框架逻辑
确定有几种状态,每一种状态要完成哪一些功能
BOOL值方法
两个BOOL值,组合出四种状态
缺点
逻辑不清晰的情况下,问题排查困难重重
有一些状态,还要根据A的状态去判断B的状态,非常绕圈,很容易混乱。
枚举状态方法
三种状态
stopwatchStartAndLap
= 0,
stopwatchStopAndLap,
stopwatchStartAndReset,
优点
三种状态,简单明了,易于操作,不需要考虑用BOOL值情况下额外的绕圈
采用哪一种数据库和数据结构
小型数据存储的方法全部摒弃,因为存入数据需要将上一次的数据先取出
SQLite3
FMDB
增加
删除
改变
查询
在查询出的结果集中进行倒序排列,再输出到可变数组,用TableViewCell显示
CoreData
重量级数据库,不考虑
记时器的功能和精确度的确定
功能
Start
将初始值默认设置为1970.01.01.00:00.00 0000
用时区变化将当前时区加减为格林尼治时间,以此显示为00:00.00
比如北京时区为+0800,调整后为 0000,这样启动显示就不会出现为08:00.00
启动两个计时器
一个控制每次Lap后重置时间
另一个控制仅仅只在reset后才重置时间
时间增加方法
每运行0.01秒后执行时间增加方法
时间持续计时的保证
采用NSRunLoop保证不因为点击其它控件,导致计时器停止
Stop
暂停时将计时器的定时器废弃
重新再点击start时,将暂停时保存的deltaSeconds传送到start方法中
Lap
每次点击lap都将小计时器上的记录保存到数据库,同时显示到tableViewCell上
大计时器不受此影响
Reset
将计时器废弃
lbl显示数据清零
数据库数据删除
相关数据显示恢复到初始值
数据缓存
退出应用,再次进入应用,如果上次有数据,会显示出来
精确度
精确到毫秒
mm:ss.SS
UI的设计
Autolayout
设置动态子视图变化比较复杂,故不用
动态坐标系多屏幕匹配
将UI分成三部分,分别完成后添加到self.view上
_timeLblView
_btnView
_listTableView