我有一个SCNCamera在iOS上的3D SceneKit视图中工作。
当我改变屏幕的方向时,为了保持世界对象的大小和相对位置相同,我需要改变SCNCamera的FoV。
但是,我无法为这种变化设置动画,因此当 FoV 从一个设置更改为另一个设置时,世界会"闪烁"或"脉冲"。
有没有办法顺利地做到这一点,这样FoV的变化就不会突然到导致世界上的物体"脉冲"?
当设备改变方向时,将执行以下代码:
if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight
{
self.cameraNode?.camera?.fieldOfView = 38
}
else
{
self.cameraNode?.camera?.fieldOfView = 50
}
我尝试将 FoV 更改包装在 UIView 动画块中,但这不起作用。
我试图延迟在线程上运行它,但随着 FoV 的变化,这仍然会导致视觉"脉冲"。
有没有办法使这种过渡顺利进行?
您需要添加带有SCNTransaction
的代码,如下所示才能制作动画。
SCNTransaction 类定义了场景工具包的场景体系结构 内容更改,包括隐式动画:事务是 将节点的多个更改组合在一起的单个原子操作, 几何体、材质或其他场景内容。
if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {
SCNTransaction.begin()
SCNTransaction.animationDuration = 1.5
self.cameraNode?.camera?.fieldOfView = 38
SCNTransaction.commit()
} else {
SCNTransaction.begin()
SCNTransaction.animationDuration = 1.5
self.cameraNode?.camera?.fieldOfView = 50
SCNTransaction.commit()
}