在某些情況下需要擴充套件第三方庫的行為。對於簡單的修改沒有什麼問題,對於複雜的修改(核心功能),我們首先要做的就是深入庫的源**中理解原理,查詢線索,不斷測試,最後完成我們的擴充套件。
下面舉一例: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 訊息時間間隔...