背景
? ? 公司的APP已經(jīng)上線嘿辟,突然需要添加主題功能藕各〕卮荩基本上每個(gè)主題都會(huì)造成一些文字、背景上的沖突激况。APP默認(rèn)擁有一個(gè)主題作彤,用戶(hù)選擇不同的項(xiàng)目(項(xiàng)目擁有不同的主題)膘魄。優(yōu)先級(jí)為:用戶(hù)選擇、項(xiàng)目默認(rèn)竭讳、APP默認(rèn)创葡。
主要思路
? ? 將主題需要修改的地方(圖片、顏色)都統(tǒng)一命名绢慢,通過(guò)主題管理者對(duì)不同主題進(jìn)行圖片蹈丸、顏色進(jìn)行獲取使用。保證代碼里面不用做任何判斷呐芥,簡(jiǎn)單使用逻杖。
資源
每個(gè)主題對(duì)應(yīng)一個(gè)Bundle
? ? 每一個(gè)主題都有一個(gè)對(duì)應(yīng)的Bundle,里面包含了主題的圖片思瘟、顏色的plist文件荸百。
主題管理者
? ? 我使用了一個(gè)主題管理單例類(lèi),這個(gè)類(lèi)的主要功能為:
1)提供主題需要使用的顏色
? ? 初始化滨攻、切換主題的時(shí)候?qū)⑹褂脤?duì)應(yīng)的主題plist將每個(gè)顏色都提取出來(lái)够话,轉(zhuǎn)化為對(duì)應(yīng)的屬性。(我們使用的有 主色3光绕、輔色2 以及沖突的顏色和特殊地方的顏色)
2)圖片
? ? 通過(guò)方法轉(zhuǎn)換為"bunldName/imageName"的方式使用圖片女嘲。
使用
主題切換和保存
? ? 首先使用枚舉表示通的主題(枚舉有個(gè)對(duì)應(yīng)的字符串?dāng)?shù)組,代表了對(duì)應(yīng)的bundleName诞帐。swift更方便實(shí)現(xiàn))
? ? 主題類(lèi)有currentBundleName保留當(dāng)前主題的bundleName和對(duì)應(yīng)的顏色屬性欣尼。切換主題就是更改bundleName,并且將顏色屬性重新賦值通過(guò)plist停蕉。
? ? 每次切換主題都通過(guò)NSUserDefaults將對(duì)應(yīng)的主題名保存起來(lái)愕鼓,用于下次啟動(dòng)使用。
主題默設(shè)置
? ? 主題枚舉有默認(rèn)主題慧起,初始化時(shí)候使用菇晃。默認(rèn)主題不保留到本地,放置項(xiàng)目添加默認(rèn)主題后沖突蚓挤。
? ? 默認(rèn)主題的獲取是由服務(wù)器告知磺送。我們的主題名字進(jìn)行了統(tǒng)一,服務(wù)器返回的主題為bundleName灿意。
總結(jié):
? ? 因?yàn)殚_(kāi)發(fā)之初沒(méi)有對(duì)主題考慮估灿,所以添加主題功能的時(shí)候會(huì)很麻煩,會(huì)有很多沖突的顏色脾歧、圖片甲捏。這種做法將處理都?xì)w結(jié)到了一處演熟,個(gè)人覺(jué)得很方便(有更好做法的歡迎指教)鞭执。
Tip:
1)盡量保持每個(gè)地方使用的顏色(都是一個(gè)級(jí)別對(duì)應(yīng)的顏色司顿,比如主色1)在對(duì)應(yīng)主題下一致。
2)注意色值沖突兄纺,最好每個(gè)顏色色值沖突后備用顏色只有一個(gè)大溜,會(huì)減少開(kāi)發(fā)工作量。
本人開(kāi)發(fā)時(shí)間不長(zhǎng)估脆,很多有錯(cuò)誤或者不合理钦奋、不簡(jiǎn)單的地方歡迎指正。