在產(chǎn)品設計之初摄乒,我希望我的工具類產(chǎn)品能夠被足夠多的人接受悠反,因此單一的主題很難滿足所有人的需求。在已經(jīng)發(fā)布的OneDay缺狠、OneClock问慎,以及在內(nèi)測的OneRead中,我都為用戶提供了可以自定義主題的功能挤茄。
這些主題做起來并不復雜如叼,只要最初的框架搭好了,以后隨時可以新增和修改主題穷劈。今天分享給大家這其中的實現(xiàn)原理笼恰。
一踊沸、明確哪些因素影響了頁面主題?
從布局到交互社证,所有的因素都將影響頁面的主題逼龟。
主背景顏色
主字體顏色
按鈕的顏色
導航條的背景顏色
導航條的字體顏色
底部欄的背景顏色
底部欄的字體顏色
... ...
除了這些可自定義顏色的設置外,還有兩項值得重要的設置:
1.頂部狀態(tài)欄的風格
2.鍵盤的風格
二腺律、如何保存主題配置數(shù)據(jù)?
明確這些設置之后宜肉,我們建立一個Themes.swift的文件
import Foundation
import UIKit`
struct ColorTheme{
//所有的變量匀钧、函數(shù)在這里添加
}
然后在其中先添加所有初始化變量。
static var themeBarStyle = UIBarStyle.black //頂部狀態(tài)欄的風格
static var themeKeyboardStyle = UIKeyboardAppearance.dark //鍵盤樣式風格
static var themeBackColor:UIColor = UIColor(red: 60/255, green: 64/255, blue: 65/255, alpha: 1)
static var themeFrontColor:UIColor = UIColor.white
static var themeBackgroudColor:UIColor = UIColor(red: 33/255, green: 33/255, blue: 33/255, alpha: 1)
static var themeBackgroudFrontColor:UIColor = UIColor.gray
三谬返、如何改變主題設置之斯?
在Themes.swift
中添加切換主題的函數(shù) themeSelect(index:Int)
staticfunc themeSelect(index:Int){
switch index {
case0:
theme0()
case1:
theme1()
case2:
theme2()
case3:
theme3()
case4:
theme4()
case5:
theme5()
case6:
theme6()
case7:
theme7()
case8:
theme8()
case9:
theme9()
default:
print("default")
}
//這些提到的函數(shù)必須添加上,根據(jù)主題數(shù)量進行設置
}
函數(shù)的參數(shù)值決定了主題變量最終的值遣铝,例如我們要使用第三號主題佑刷,先調(diào)用Themes.themeSelect(index:2)
改變所有主題變量的值,然后再使用。
static func theme3(){
//修改所有主題參數(shù)的值
...
...
}
四、如何在各個頁面中調(diào)用主題媒殉?
Themes
中的主題變量有默認值,每個頁面加載主題前都必須知道當前是什么主題檀何。
例如我們在Home頁面中要使用主題,那么Home加載時廷支,在viewWillAppear
中添加self.themeColorLoad()
來使用主題频鉴。
在OneDay中我使用了CoreData
來保存主題參數(shù),每次使用主題取決于CoreData
中保存的主題參數(shù)恋拍。
func themeColorLoad(){
let themeIndex = Int(self.appDelegate.mysetting.colorTheme) //先獲取了主題參數(shù)
ColorTheme.themeSelect(index: themeIndex) //再進行主題各變量值的設置
//然后開始使用主題:
self.navigationController?.navigationBar.barStyle = Themes.themeBarStyle //頂部狀態(tài)欄
self.navigationController?.navigationBar.barTintColor =Themes.themeBackColor
self.view.backgroundColor =Themes.themeBackColor
self.tfName.keyboardAppearance = ColorTheme.themeKeyboardStyle //鍵盤的顏色
}
這樣便搞定了主題的設置和使用垛孔,以后要修改主題的配色、新增主題施敢,都只需要在Themes.swift
中更新就可以周荐。
除了主題自定義之外,OneDay還提供了20種應用圖標僵娃,這些圖標也是為了與主題更佳搭配才制作的概作。
GitHub:OneSwift - iOS Tips Based On Swift
微博:xDEHANG