之前的文章ios 在cell中使用倒計時的處理方法得到大量的支援, 在這先感謝大家的支援. 但是也收到不少人的回覆表示不會用, 需要一一解答, 由於之前寫的時候沒有使用markdown編輯, 所以現在沒法更新之前的文章, 重新寫乙份清晰的文章
oycountdownmanager-swift v2.0
原理分析圖.png
單個列表倒計時.gif
* 多個列表倒計時
* 多個頁面倒計時
* 分頁列表倒計時
* 後台模式倒計時
多個列表倒計時.gif
多個頁面倒計時.gif
分頁列表倒計時.gif
1.1 第一種方法: 使用cocoapods自動安裝
pod '1.2 第二種方法oycountdownmanager
'
2. 在第一次使用的地方呼叫[kcountdownmanager start]
- (void3. 在cell初始化中監聽通知 kcountdownnotification)viewdidload
- (instancetype)initwithstyle:(uitableviewcellstyle)style reuseidentifier:(nsstring *)reuseidentifier4. 在cell設定通知**, 取得時間差, 根據時間差進行處理return
self;
}
- (void5. 當重新整理資料時,呼叫reload方法)countdownnotification
return
;
///重新賦值
self.timelabel.text = [nsstring stringwithformat:@"
倒計時%02zd:%02zd:%02zd
", countdown/3600, (countdown/60)%60, countdown%60
];}
- (void6. 當不需要倒計時時, 廢除定時器)reloaddata
[kcountdownmanager invalidate];增加identifier:識別符號, 乙個identifier支援乙個倒計時源, 有乙個單獨的時間差
/*以乙個頁面有兩個獨立的列表為例* 新增倒計時源
*/- (void)addsourcewithidentifier:(nsstring *)identifier;
/** 獲取時間差
*/- (nsinteger)timeintervalwithidentifier:(nsstring *)identifier;
/** 重新整理倒計時源
*/- (void)reloadsourcewithidentifier:(nsstring *)identifier;
/** 重新整理所有倒計時源
*/- (void
)reloadallsource;
/** 清除倒計時源
*/- (void)removesourcewithidentifier:(nsstring *)identifier;
/** 清除所有倒計時源
*/- (void)removeallsource;
1.定義identifier(常量)
nsstring *const oymultipletablesource1 = @"2.增加倒計時源oymultipletablesource1";
nsstring *const oymultipletablesource2 = @"
oymultipletablesource2
";
//3.在cell通知**中, 通過identifier取得時間差, 根據時間差進行處理增加倒計時源
[kcountdownmanager addsourcewithidentifier:oymultipletablesource1];
[kcountdownmanager addsourcewithidentifier:oymultipletablesource2];
- (void4. 當重新整理資料時,呼叫reloadsourcewithidentifier:重新整理時間差)countdownnotification
///計算倒計時
oymodel *model =self.model;
///根據identifier取得時間差, 以oymultipletablesource1為例
nsinteger timeinterval = timeinterval =[kcountdownmanager timeintervalwithidentifier: oymultipletablesource1];
}nsinteger countdown = model.count -timeinterval;
///當倒計時到了進行**
if (countdown <= 0
)
///重新賦值
self.detailtextlabel.text = [nsstring stringwithformat:@"
倒計時%02zd:%02zd:%02zd
", countdown/3600, (countdown/60)%60, countdown%60
];}
- (void5. 當頁面銷毀, 移除倒計時源, 或者不需要定時器, 廢除定時器)reloaddata
- (void)reloaddata
誤差分析
滾動cell時出去文字閃爍在給cell的模型賦值後, 最好手動呼叫一下countdownnotification方法, 保證及時重新整理
///重寫setter方法
- (void)setmodel:(model *)model
倒計時為0後出現復用問題在倒計時為0後, 應該**給控制器, 從後台請求一次資料, 保證倒計時沒有出現誤差
if (countdown <= 0) return;
出現每秒倒計時減2的問題1.檢視定時器設定是否正確, 或者通知是否監聽了兩次
2.在countdownnotification方法中, 是否用[nsdate date]做了某些計算, 因為[nsdate date]為當前時間, 每一秒去取都會比上一秒大一秒, 再加上timeinterval也是一秒加一, 那麼就會出現每秒倒計時減2的問題
如果還有不懂的問題, 或者出現其它bug請檢視demo: demo
iOS每個Cell倒計時
實現原理 1 將資料 資料中的時間部分 以字典 字典中包括 記錄所存資料下標,還有所剩時間 兩個 key 的形式儲存到陣列中。2 開啟定時器,執行 遍歷整個陣列,每秒減 一,然後儲存到他原來的位置。3 每次減一之後,根據之前記錄的下標 viewcontroller.m countdowndemo c...
iOS 倒計時按鈕
1 新建乙個類,取名為 timerbtn,繼承uibutton 2 在timer.h中新增如下 import inte ce timerbtn uibutton 建立倒計時按鈕 param frame 位置大小 param title 標題 param ntimer 倒計時時間 return 倒計時...
iOS倒計時動畫
效果圖 製作成gif之後,幀率變快了,看起來很彆扭,實際上是每秒執行一次的 h 檔案 inte ce countdownview uiview property nonatomic,assign long long time property nonatomic,assign,readonly lo...