主題面板管理YRTheme簡單介紹

2021-07-13 14:49:08 字數 1640 閱讀 5467

開發中常常遇到切換主題,夜間模式什麼的,一般的做法都是變了新主題就判斷一下重新設定新值,**量較多還不夠清晰。

本庫將主題素材與**進行了分離,力求一次**繫結,後續只需要更改素材即可實現主題樣式更改

yrtheme位址 :

特性如下

具體使用步驟如下

在不同的主題**配置檔案中設定好相同鍵名的顏色、等等。在例子中,主題名稱為default的,對應的配置檔案為defaultcolor.plist和defaultimage.plist,當然,你可以根據自己需求重新定製主題和各素材名稱匹配獲取方式,例子中我實現了的主題素材獲取處理類為themehepler。

在程式用對常用控制項進行主題繫結,繫結**基本如下

_manager = [[yrthememanager alloc]init];

//繫結各種控制項資料

[_manager bindview:self.view bgcolorname:@"commonbgcolor"];

[_manager bindimageview:self.imageview imagename:@"testimage1"];

[_manager bindlabel:self.label titlecolorname:@"labeltitlecolor"];

[_manager bindbutton:self.button titlecolorname:@"labeltitlecolor" state:uicontrolstatenormal];

[_manager bindbutton:self.button titlecolorname:@"buttonhighlight" state:uicontrolstatehighlighted];

變更主題**

// 全域性主題更改

[[yrtheme shared]setcurrentthemename:@"dark"];

// 僅當前manager管理的主題更改

[_manager updatetotheme:@"dark"];

如果遇到無法繫結的屬性(比如layer的顏色什麼的),那只能老老實實通過監聽kyrthemechangenotification來處理主題變更的功能了。

關於內部實現

簡單說起來是使用了乙個字典,記錄了所有繫結過的控制項,當然是弱引用的,所以無需擔心記憶體問題

ps:關於如何在nsdictionary中弱引用儲存乙個物件,一般我們自己實現的使用如下方式:

//新建乙個類似這樣的物件

@inte***ce

yrthemesafeobject : nsobject

@property (weak, nonatomic) id obj;

@end

@implementation

yrthemesafeobject

@end

後續儲存時先用該物件包裝一下,再儲存字典中等等。

當然也有使用nshashtable類的,有興趣的可以自行查閱文件。

當收到主題變更時,檢查儲存的所有控制項,賦值新的素材和樣式。說起來就這麼簡單,實現還是有點小麻煩的,具體請看demo。

主題與面板

主題和 主題類似於層疊樣式表 css 因為它們都可以為web頁面定義各種樣式。但主題比css更進一步,它允許給應用程式的頁面應用樣式 影象甚至css檔案,可以在應用程式 頁面或伺服器控制項級別上應用asp.net中的主題。建立主題 一 建立外觀檔案 1 可以有多個主題 3.在主題檔案下新增外觀檔案 ...

主題和面板

今天學習了主題和 知道了如何建立乙個主題themes,還有 skin 在.skin外觀檔案中可以定義web伺服器控制項的外觀,定義的樣式類似aspx頁面中的控制項的標籤,只是去除 id 等非外觀屬性。可以在頁面中設定好控制項樣式,將設定好的標籤複製到.skin外觀檔案中,再將非外觀屬性刪除即可 外觀...

主題與面板系列 3

按上一節,主題為 bluesky,其 檔案內容為 現在談談怎麼應用這個主題。一 在 aspx 檔案中,指令如下 page language c theme bluesky 控制項應用如下 page 指令中,theme 屬性值為主題資料夾的名稱,我們可以看到 l1 的寬度為 100px,l2 l3 指...