DKNightVersion下載地址: https://github.com/Draveness/DKNightVersion
基本原理就是利用一個單例對象來存儲顏色, 然后通過runtime中的objc_setAssociatedObject和objc_getAssociatedObject來完成兩個對象間傳遞要保存的顏色(純屬個人看法)
下面是gif效果圖:
下面是代碼部分:
import UIKit class ViewController: UIViewController { @IBOutlet weak var changeButton: UIButton! @IBOutlet weak var testSwitch: UISwitch! override func viewDidLoad() { super.viewDidLoad() self.title = "夜間模式" // 導航欄背景 self.navigationController?.navigationBar.dk_barTintColorPicker = DKColorWithRGB(0xffffff, 0x343434) // 導航欄上的item和返回等顏色 self.navigationController?.navigationBar.dk_tintColorPicker = DKColorWithColors(UIColor.redColor(), UIColor.whiteColor()) // view的背景顏色 self.view.dk_backgroundColorPicker = DKColorWithRGB(0xffffff, 0x343434) // 按鈕title顏色 self.changeButton.dk_setTitleColorPicker(DKColorWithColors(UIColor.redColor(), UIColor.whiteColor()), forState: .Normal) // 開關顏色 self.testSwitch.dk_onTintColorPicker = DKColorWithColors(UIColor.greenColor(), UIColor.redColor()) } @IBAction func change(sender: AnyObject) { // 判斷當前是否為夜間模式 if DKNightVersionManager.currentThemeVersion() == DKThemeVersion.Night { // 切換為白天模式 DKNightVersionManager.dawnComing() } else { // 切換為夜間模式 DKNightVersionManager.nightFalling() } } }
在項目中, 可以對以下控件設置兩種顏色, 分別為白天模式和夜間模式
當設置完成, 調用以下代碼即可切換為白天模式
// 切換為白天模式 DKNightVersionManager.dawnComing()
或者調用一下代碼切換為夜間模式
// 切換為夜間模式 DKNightVersionManager.nightFalling()
使用還是挺簡單的(不過需要對每個控件進行設置, 對比較龐大的項目來說, 還是很蛋疼的)...