SwiftUI 實(shí)現(xiàn)在app內(nèi)動(dòng)態(tài)更改淺色或者深色模式

我們知道swiftUI基本可以跟隨系統(tǒng)設(shè)置的淺色或者深色模式缠劝,但是有時(shí)我們需要用戶(hù)對(duì)自己應(yīng)用作出自己喜歡的模式妖泄,不受系統(tǒng)影響漏麦。
大致實(shí)現(xiàn)效果如下


屏幕錄制2020-09-09 16.10.56.gif

動(dòng)畫(huà)效果就不展現(xiàn)了客税,動(dòng)畫(huà)也是一個(gè)github庫(kù)找到的,通過(guò)修改實(shí)現(xiàn)撕贞,這里講實(shí)現(xiàn)模式切換不隨系統(tǒng)
1:首先如果你想你的app只有一種模式更耻,可以在info.plist文件中設(shè)置User Interface Style 值為light或者dark

2:這種方法就是圖片展示的方法
在SceneDelegate文件中有一開(kāi)始進(jìn)入app觸發(fā)的方法

  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
      
        if let windowScene = scene as? UIWindowScene {
            
            let window = UIWindow(windowScene: windowScene)
            
            let contentView = TranserView(window: window).environment(\.managedObjectContext, context)//這個(gè)本來(lái)是寫(xiě)在外面的,拿進(jìn)來(lái)
            
            let style = userDefault.string(forKey: "style")//獲取我們存的值捏膨,判斷進(jìn)入app使用什么樣式秧均,存值,在接下來(lái)的代碼展示
            
            switch style {
            case "dark":
                window.overrideUserInterfaceStyle = .dark//黑暗模式
            case "light":
                window.overrideUserInterfaceStyle = .light//淺色模式
            default:
                window.overrideUserInterfaceStyle = .unspecified//跟隨系統(tǒng)
            }
            
            
            window.rootViewController = MyHontingController(rootView: AnyView(contentView))
            self.window = window
            window.makeKeyAndVisible()
        }
        
      
    }

上訴代碼可以看出window是有個(gè)overrideUserInterfaceStyle方法可以用來(lái)設(shè)置我們的界面号涯,這樣我們只要把這個(gè)值傳到我們需要更改的他的界面即可

 @State var window: UIWindow//這個(gè)定義完在按鈕中更改他的樣式
 @Environment(\.colorScheme) var colorScheme //可以用來(lái)判斷當(dāng)前的模式
 Button(action: {
                            
                            self.changeModel = false
                            self.window.overrideUserInterfaceStyle = .light //更改方法
             
                            userDefault.set("light", forKey: "style") //定義的全局變量熬北,用來(lái)存儲(chǔ)我們更改的樣式
                            
                        }) {
                            
                            Image(systemName: self.colorScheme == .dark ?  "circle" :"checkmark.circle.fill")
                                .foregroundColor(self.colorScheme == .dark ? .gray : .yellow)//三元表達(dá)式,用來(lái)適配黑暗模式與淺色模式切換時(shí)來(lái)更改展示的顏色
                        }.transition(.opacity)
                        

在更改后一定要寫(xiě)一個(gè)本地簡(jiǎn)單存儲(chǔ)诚隙,userDefault讶隐,在第一進(jìn)入的時(shí)候獲取這個(gè)值,然后根據(jù)你獲取的值來(lái)判斷樣式久又,這樣就記住你改的樣式

https://www.bilibili.com/video/BV1ui4y1u7Kt/
這是視頻鏈接巫延,隨便剪輯的,哈哈哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末地消,一起剝皮案震驚了整個(gè)濱河市炉峰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脉执,老刑警劉巖疼阔,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡婆廊,警方通過(guò)查閱死者的電腦和手機(jī)迅细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淘邻,“玉大人茵典,你說(shuō)我怎么就攤上這事”鼍耍” “怎么了统阿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)筹我。 經(jīng)常有香客問(wèn)我扶平,道長(zhǎng),這世上最難降的妖魔是什么蔬蕊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任蜻直,我火速辦了婚禮,結(jié)果婚禮上袁串,老公的妹妹穿的比我還像新娘概而。我一直安慰自己,他們只是感情好囱修,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布赎瑰。 她就那樣靜靜地躺著,像睡著了一般破镰。 火紅的嫁衣襯著肌膚如雪餐曼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,729評(píng)論 1 289
  • 那天鲜漩,我揣著相機(jī)與錄音源譬,去河邊找鬼。 笑死孕似,一個(gè)胖子當(dāng)著我的面吹牛踩娘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喉祭,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼养渴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泛烙?” 一聲冷哼從身側(cè)響起理卑,我...
    開(kāi)封第一講書(shū)人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔽氨,沒(méi)想到半個(gè)月后藐唠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帆疟,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年宇立,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踪宠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泄伪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匿级,到底是詐尸還是另有隱情蟋滴,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布痘绎,位于F島的核電站津函,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏孤页。R本人自食惡果不足惜尔苦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望行施。 院中可真熱鬧允坚,春花似錦、人聲如沸蛾号。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲜结。三九已至展运,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間精刷,已是汗流浹背拗胜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怒允,地道東北人埂软。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纫事,于是被迫代替她去往敵國(guó)和親仰美。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348