專案中要做白天夜景切換的功能,寫了個擴充套件方便用,記錄一下。不太完善,主要是提供一種思路。。。,歡迎大牛指點一下。
效果圖:
利用category封裝 使用是這樣的
實現思路:
1,色值變化,主要是view的backgroundcolor,label.texcolor, button.titlecolor等等。。。
要是白夜切換肯定要像實現多語言一樣 有個key 然後動態繫結到檢視上
這裡實現是通過乙個列舉,這樣寫**的時候比價方便
2 變換,包括imageview 還有button
key 的話 就是本身名字 ,要是夜景的話 名字後加_night 例如 mine_bg.png 夜景就是 mine_bg_night.png
然後寫乙個字串的 擴充套件
第二步,key 解決了以後 接下來就是繫結的問題
建立乙個容器類 儲存該物件的target 並為物件新增方法和引數, 引數是多引數的。
這裡是新增方法引數的實現, 是儲存到乙個陣列裡面了, 因為有可能例如button 可能設定了背景色,和title 等,多個方法儲存
這裡是建立容器類的時候 新增通知。。。 並遍歷儲存的物件方法並執行。。 支援多引數
接下來是category 繫結的問題 使用runtime特性
基本就完事兒了
此處單例使用的比較安全的方式,哈哈哈,因為之前被人問住了,所以盡量標準化寫。。。
只是新增了幾個簡單的功能,專案還在寫,用到時候繼續補充。。。
續:後來發現專案裡使用的時候 定義列舉相當耗時耗力,並且名字不好區分,所以我又改良了一下
使用是這樣子的
// z這裡
self.view.dnbackgroundcolor = elmakecolortuple(uicolorfromrgb(0xedeeef), uicolorfromrgb(0x3a3928));
uiimageview * imageview = [[uiimageview alloc] init];
imageview.imagekey = @"mine_bg";
[imageview sizetofit];
[self.view addsubview:imageview];
uilabel * label = [[uilabel alloc] initwithframe:cgrectmake(20, cgrectgetmaxy(imageview.frame), 200, 30)];
label.font = [uifont systemfontofsize:15];
label.text = @"這是乙個 uilabel";
//這裡
label.dntextcolor = elmakecolortuple(uicolorfromrgb(0x222222), uicolorfromrgb(0xdcc787));
[self.view addsubview:label];
uibutton * button = [uibutton buttonwithtype:uibuttontypecustom];
// 這裡
button.dnbackgroundcolor = elmakecolortuple(uicolorfromrgb(0x7c936e), uicolorfromrgb(0x4b4a38));
[button setframe:cgrectmake(cgrectgetwidth(self.view.frame)/2 - 30, cgrectgetheight(self.view.frame) - 100, 60, 30)];
[button settitle:@"change" forstate:uicontrolstatenormal];
//這裡
[button setdntitlecolor:elmakecolortuple([uicolor whitecolor], uicolorfromrgb(0xdcc787)) forstate:uicontrolstatenormal];
button.titlelabel.font = [uifont systemfontofsize:15];
[button addtarget:self action:@selector(daynightchange:) forcontrolevents:uicontroleventtouchupinside];
[self.view addsubview:button];
使用的時候 dn是day-night的縮寫,然後使用方法elmakecolortuple建立乙個陣列@[daycolor, nightcolor];
typedef nsarray * elcolortuple;
elcolortuple elmakecolortuple(uicolor * daycolor, uicolor * nightcolor);
需要改變夜景的時候 也無需使用我這單例了,直接呼叫
@inte***ce eldaynight : nsobject
/** 公共api 設定白天夜景
@param night 是否是夜景
*/+ (void)setnight:(bool)night;
這個api可以直接呼叫,[eldaynight setnight:yes/no]; //這裡沒有本地化記錄狀態,因為我自己的專案裡已經實現了。 Vue多系統切換實現方案
前言 公司分好幾www.cppcns.com個後台模組,統一使用vue elementui框架開發,每乙個後台模組都是單獨團隊開發的。並且幾個系統整體的風格 布局一樣的,包括左側邊欄,上方的麵包屑等 使用者在使用的時候,可能要切換別的系統就要在瀏覽器裡,新開啟視窗,再輸入 回車。總結來說,低效,所以...
iOS 彩色TabBar切換動畫實現
無意間看到乙個彩色tabbar切換的設計圖,感覺很不錯,有空就把他實現了。環境資訊 mac os x 10.10.4 xcode 6.4 ios 8.4 效果圖 效果圖 正文 看到這個彩色切換效果的時候,我第乙個反應就是在tabbar上有乙個彩色的view,然後每個色塊的顯示都是通過mask來顯示的...
iOS 啟動頁實現方案
在didfinishlaunchingwithoptions裡面建立兩個window,乙個是主window,乙個是啟動頁window,啟動頁用來判斷是跳轉主頁面還是登陸介面。如果是登入狀態,那麼在規定時間內銷毀啟動頁window,展示主window。如果不是登入狀態,那麼就從引導頁跳轉登入介面,登入...