在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)
}
}