定製Github中的定時器行為的操作教程

2021-12-30 02:03:26 字數 1482 閱讀 9605

在某些情況下需要擴充套件第三方庫的行為。對於簡單的修改沒有什麼問題,對於複雜的修改(核心功能),我們首先要做的就是深入庫的源**中理解原理,查詢線索,不斷測試,最後完成我們的擴充套件。

下面舉一例:github中的mztimerlabel定時器庫

該定時器很簡練,但功能很強大,其中包含了正計時和倒計時功能。不過我還希望增加乙個新功能,就是按秒的個數而不是時間格式來顯示。

比如現在已計時1分半鐘,按照常規時間顯示應該為:00:01:30,如果按照個數顯示則為:000090.

首先檢視庫文件,為使用者考慮周全的庫都會有一定自定義行為,索性這個也不例外,我們在其mztimerlabeldelegate**中發現如下方法:

func timerlabel(_ timerlabel: mztimerlabel!, customtexttodisplayattime time: timeinterval) -> string!我們馬上來實現它:

///自定義按秒個數返回計時器顯示內容

func timerlabel(_ timerlabel: mztimerlabel!, customtexttodisplayattime time: timeinterval) -> string!

let ftstring = string(format: "%06d", int(time))

return ftstring

}我怎麼知道返回」「字串表示按預設時間格式顯示?開啟其源**mztimerlabel.m檔案,經過簡單檢視,發現所有更新label的操作都在-(void)updatelabel方法中;進入該方法,找到下面一段:

if ([_delegate respondstoselector:@selector(timerlabel:customtexttodisplayattime:)]) else

}很清楚!如果使用者實現了**方法則呼叫,並且檢查其返回的值:如果為0則呼叫預設格式(第#2行),否則使用使用者的格式(第#1行)

不過還有乙個問題:在timer暫停時修改顯示格式不會立即在介面中變化,非要等到計時器啟動後顯示才發生變化。

只是乙個小問題,不過如果不作出修改:

1.使用者體驗會有下降

2.強迫症的貓受不了(主要原因…)

所以我們還是嘗試修改一下,在timer暫停時要想顯示介面發生變化,我們得仔細檢查updatelabel方法。該方法**實現比較長,這裡就不貼出來了。關鍵是閱讀後可以理解其更新介面的邏輯,我們很快就可以自己寫乙個新的出來:

///在計時器暫停時重新整理label的顯示!

-(void)pauseupdateelse

if ([_delegate respondstoselector:@selector(timerlabel:customtexttodisplayattime:)]) else

}}現在ok了,我們來測試一下:

完美達到我們的效果!打完收工 ;)

Python學習 簡單定製定時器

time模組可參考 簡單示例 import time as t class mytimer 初始化 def init self self.unit 年 月 天 小時 分鐘 秒 self.prompt 計時還未開始t t self.lasted self.begin 0 self.end 0def s...

Linux中的定時器

linux中乙個比較簡單的計時器是alarm 和 signal 如果要求不很精確的話,用它們兩個配合就足夠了。從alarm這個名字的意思 警告 就可以看出,此計時器在設計時,也許就僅僅只是提供給呼叫者用來做警告 使用的。宣告如下 unsigned int alarm unsigned int sec...

MFC中的定時器

mfc中提供了定時器,可以實現每隔一段時間產生乙個定義器訊息的功能。這樣我們就可以在響應定時器訊息的函式中編寫 實現一定的功能。定時器的使用分三步 第一步,建立定時器,使用settimer函式。在這個函式中設定1 定時器的標號 這個標號唯一的標定了這個定時器,在多個定時器的時候有用 2 訊息時間間隔...