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