我們知道swiftUI基本可以跟隨系統(tǒng)設(shè)置的淺色或者深色模式缠劝,但是有時(shí)我們需要用戶(hù)對(duì)自己應(yīng)用作出自己喜歡的模式妖泄,不受系統(tǒng)影響漏麦。
大致實(shí)現(xiàn)效果如下
動(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/
這是視頻鏈接巫延,隨便剪輯的,哈哈哈