mbprogresshud是objective-c寫的第三方庫,用來作為進度指示器使用,原版objective-c實現,當然,也有swift實現,本文是依據原作者的objective-c原始碼來分析的。
mbprogresshud使用時本質是乙個尺寸為螢幕尺寸(顯示時能完全遮住其它檢視)的uiview,而最好將它新增到視窗上或者視窗的根檢視控制器的根檢視上。
mbprogresshud上主要由三個子檢視:
當然,這三個檢視不一定會同時顯示。mbprogresshud有三個初始化方法(使用時是呼叫前兩個方法,而前兩個初始化方法內部是呼叫第三個方法):
- (id)initwithview:(uiview *)view
- (id)initwithwindow:(uiwindow *)window
mbprogresshud並不只是中心顯示的檢視,它其實是佔據了整個螢幕,在layoutsubviews方法中計算除了中心檢視的尺寸、布局:- (id)initwithframe:(cgrect)frame //這裡的frame是hud直接父檢視的frame,一般是視窗大小
設定了一些預設的屬性,並且對子控制項布局、邏輯進行了處理,子控制項已新增到hud上,只是沒有設定其frame。
<1>[self setuplabels];
新增兩個label(label、detailslabel,剛開始的frame都是hud的frame)
<2>[self updateindicators];
會對mode(指示器的模式:系統的uiactivityindicatorview、環形指示器、條狀指示器、沒有指示器)進行判斷,而mode屬性的定義為(@property (assign) mbprogresshudmode mode;)在指示器的位置(即同一位置)根據不同需求設定不同樣式的指示器(即不同的view,要將原來的指示器移除[indicator removefromsuperview];)
<3>[self registerforkvo];
利用kvo對hud物件的某些屬性進行值改變時的監聽。
監聽的物件屬性有: [nsarray arraywithobjects:@"mode", @"customview", @"labeltext", @"labelfont", @"labelcolor",
@"detailslabeltext", @"detailslabelfont", @"detailslabelcolor", @"progress", @"activityindicatorcolor", nil];
} <4>[self registerfornotifications];
利用nsnotification對狀態條方向方式改變進行監聽
在drawrect方法中,系統對中心檢視進行了繪製:布局子檢視方法(在這個方法中,計算出三個子控制項的frame):
- (void)layoutsubviews
在計算時,indicator代表的是指示器,有三種,指示器的size都是固定的:
uiactivityindicatorview:系統自帶,預設size是
mbbarprogressview:預設是(.0f, .0f, 120.0f, 20.0f)
mbroundprogressview,預設是(0.f, 0.f, 37.f, 37.f)
totalsize:該方法根據hud的具體樣式計算出的frame,最後賦值給size,size就是中間的黑色區域
- (void)drawrect:(cgrect)rect
利用圖形上下文繪製hud,首先判斷dimbackground是否為true來繪製dim背景,接著判斷color是否為true來設定hud的背景色
劃出hud的內容區域,根據計算出的frame
AbstractCollection原始碼分析
abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...
ThreadPoolExecutor原始碼閱讀
執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...
OrangePi One Android 原始碼編譯
一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...