我有一个popoverviewcontroller来切换水平或垂直平面检测。我知道它使用协议和委托正确传递,但由于某种原因它不会改变配置。我更改了协议功能中的配置。
谢谢!
答案 0 :(得分:1)
您可以使用新配置再次调用run(_:options:)
来更改正在运行的会话的配置。
如果将options
参数留空(或省略),并传递会话当前正在运行的相同类型的配置,则会话的所有内容(现有锚点等)保持不变,您对配置所做的任何更改都是例外。
// before
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
session.run(configuration)
// after
let newConfiguration = ARWorldTrackingConfiguration()
newConfiguration.planeDetection = .vertical
session.run(newConfiguration)
在这种情况下,如果更改平面检测设置但在重新运行会话时不删除现有锚点,则现有水平平面锚点将保留在会话中,但不会再更新。
听起来您遇到的问题是您正在更改已传递给会话的配置的属性,而不是再次将其传递给会话 - 这是调用run
的行为使用您的配置使更改生效。
可以这样想:ARConfiguration
就像您在三明治店使用的订单一样。你看看你想要洋葱和蛋黄酱的盒子,然后把表格交给收银员。表格是在碳纸上,所以他们从背面撕下副本并将其送到厨房,然后将原件交还给您,这样您就可以在拾取柜台展示它来索取您的食物。如果你涂抹“mayo”并改为检查鳄梨酱,除非你再次与收银员谈话,否则它不会改变厨房的用途。