ios 實現白天夜景切換的方案

2021-08-27 18:09:06 字數 3408 閱讀 5353

專案中要做白天夜景切換的功能,寫了個擴充套件方便用,記錄一下。不太完善,主要是提供一種思路。。。,歡迎大牛指點一下。

效果圖:

利用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。如果不是登入狀態,那麼就從引導頁跳轉登入介面,登入...