SceneKit:支持自适应UIColor(暗模式)



在SCNScene上,您可以使用例如:轻松设置背景颜色

background.contents = UIColor.tertiarySystemGroupedBackground

然而,一些UIColor(如示例中的UIColor(可以有多种外观,因此当用户在亮模式和暗模式之间切换时,颜色会自动适应。然而,当TraitCollection发生更改(用户切换外观(时,SceneKit不会更新其值。

所以问题是,当外观发生变化时,如何让SceneKit正确地切换其值?

如果有管理SCNView/场景的视图控制器,则可以使用traitCollectionDidChange方法解析实际颜色并相应地更新场景。例如:

class Example3DViewController: UIViewController {
// ...
var sceneBackgroundColor: UIColor = .systemBackground {
didSet {
self.updateColors()
}
}

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
self.updateColors()
}

func updateColors() {
self.scene.background.contents = self.sceneBackgroundColor.resolvedColor(with: self.traitCollection)
}
}

最新更新