


相關(guān)代碼詳情見(jiàn)https://github.com/xyh3171/StopwatchFormal.git
搭建計(jì)時(shí)器工程的框架邏輯
確定有幾種狀態(tài),每一種狀態(tài)要完成哪一些功能
BOOL值方法
兩個(gè)BOOL值,組合出四種狀態(tài)
缺點(diǎn)
邏輯不清晰的情況下,問(wèn)題排查困難重重
有一些狀態(tài),還要根據(jù)A的狀態(tài)去判斷B的狀態(tài),非常繞圈,很容易混亂。
枚舉狀態(tài)方法
三種狀態(tài)
stopwatchStartAndLap
= 0,
stopwatchStopAndLap,
stopwatchStartAndReset,
優(yōu)點(diǎn)
三種狀態(tài),簡(jiǎn)單明了,易于操作,不需要考慮用BOOL值情況下額外的繞圈
采用哪一種數(shù)據(jù)庫(kù)和數(shù)據(jù)結(jié)構(gòu)
小型數(shù)據(jù)存儲(chǔ)的方法全部摒棄,因?yàn)榇嫒霐?shù)據(jù)需要將上一次的數(shù)據(jù)先取出
SQLite3
FMDB
增加
刪除
改變
查詢(xún)
在查詢(xún)出的結(jié)果集中進(jìn)行倒序排列,再輸出到可變數(shù)組,用TableViewCell顯示
CoreData
重量級(jí)數(shù)據(jù)庫(kù),不考慮
記時(shí)器的功能和精確度的確定
功能
Start
將初始值默認(rèn)設(shè)置為1970.01.01.00:00.00 0000
用時(shí)區(qū)變化將當(dāng)前時(shí)區(qū)加減為格林尼治時(shí)間,以此顯示為00:00.00
比如北京時(shí)區(qū)為+0800,調(diào)整后為 0000,這樣啟動(dòng)顯示就不會(huì)出現(xiàn)為08:00.00
啟動(dòng)兩個(gè)計(jì)時(shí)器
一個(gè)控制每次Lap后重置時(shí)間
另一個(gè)控制僅僅只在reset后才重置時(shí)間
時(shí)間增加方法
每運(yùn)行0.01秒后執(zhí)行時(shí)間增加方法
時(shí)間持續(xù)計(jì)時(shí)的保證
采用NSRunLoop保證不因?yàn)辄c(diǎn)擊其它控件,導(dǎo)致計(jì)時(shí)器停止
Stop
暫停時(shí)將計(jì)時(shí)器的定時(shí)器廢棄
重新再點(diǎn)擊start時(shí),將暫停時(shí)保存的deltaSeconds傳送到start方法中
Lap
每次點(diǎn)擊lap都將小計(jì)時(shí)器上的記錄保存到數(shù)據(jù)庫(kù),同時(shí)顯示到tableViewCell上
大計(jì)時(shí)器不受此影響
Reset
將計(jì)時(shí)器廢棄
lbl顯示數(shù)據(jù)清零
數(shù)據(jù)庫(kù)數(shù)據(jù)刪除
相關(guān)數(shù)據(jù)顯示恢復(fù)到初始值
數(shù)據(jù)緩存
退出應(yīng)用,再次進(jìn)入應(yīng)用,如果上次有數(shù)據(jù),會(huì)顯示出來(lái)
精確度
精確到毫秒
mm:ss.SS
UI的設(shè)計(jì)
Autolayout
設(shè)置動(dòng)態(tài)子視圖變化比較復(fù)雜,故不用
動(dòng)態(tài)坐標(biāo)系多屏幕匹配
將UI分成三部分,分別完成后添加到self.view上
_timeLblView
_btnView
_listTableView