【发布时间】:2019-11-21 15:24:07
【问题描述】:
我有一个 SwiftUI 应用程序,其中有一个 SpriteKit 场景。但是,在明暗模式之间切换时,在重新打开应用之前,场景背景不会改变颜色。
这并不理想,所以我想在更改明暗模式外观时进行注册。我的资产中的颜色具有“任意”和“深色”两种外观。
UIViewRepresentable结构中的updateUIView()中的代码,它在与 SwiftUI 链接时设置场景:
scene.backgroundColor = UIColor(named: "Color.Scene")!
uiView.presentScene(scene)
我如何实现这一目标?我正在使用 iOS 13 的系统范围的暗模式,所以我不想要通知中心的解决方案,因为我要做的就是根据系统设置更新背景。
【问题讨论】:
-
你能像这样在视图中使用
@Environment (\.colorScheme) var colorScheme: ColorScheme,在正文中使用if self.colorScheme == .light { ... } else { ... }吗?视图将在更改时更新。 -
那么如果配色方案发生变化,我如何让
if运行? -
它会自动执行,因为它被视为
@State。如果您编辑问题并提供更多示例代码,我会尝试给您一个示例 -
@krjw 感谢您的帮助!环境变量修复了它。我将它放在持有我的
UIViewRepresentable的 SwiftUI 视图中。然后,在构造函数中,我设置场景的颜色,就像我在问题中显示的那样,因为主题是自动设置的。 -
@krjw 我也不需要使用
colorScheme变量,但是没有这个,它就行不通了。
标签: swift sprite-kit swiftui