Swift 如何顺利改变赢得';你不动吗?

Swift 如何顺利改变赢得';你不动吗?,swift,animation,orientation,scenekit,scncamera,Swift,Animation,Orientation,Scenekit,Scncamera,我有一个SCNCamera在iOS上的3D场景视图中工作 当我更改屏幕方向时,为了保持世界对象的大小和相对位置相同,我需要更改SCNCamera的FoV 但是,我无法设置此更改的动画,因此当FoV从一种设置更改为另一种设置时,世界会“闪烁”或“脉冲” 有没有一种方法可以使视场的变化不会太突然,从而使世界上的物体产生“脉冲” 当设备改变方向时,执行以下代码: 如果UIDevice.current.orientation==.landscapeLeft | | UIDevice.current.or

我有一个SCNCamera在iOS上的3D场景视图中工作

当我更改屏幕方向时,为了保持世界对象的大小和相对位置相同,我需要更改SCNCamera的FoV

但是,我无法设置此更改的动画,因此当FoV从一种设置更改为另一种设置时,世界会“闪烁”或“脉冲”

有没有一种方法可以使视场的变化不会太突然,从而使世界上的物体产生“脉冲”

当设备改变方向时,执行以下代码:

如果UIDevice.current.orientation==.landscapeLeft | | UIDevice.current.orientation==.landscapeRight
{
self.cameraNode?.camera?.fieldOfView=38
}
其他的
{
self.cameraNode?.camera?.fieldOfView=50
}
我尝试在UIView动画块中包装FoV更改,但没有成功

我试着在线程上运行它,但是随着FoV的改变,仍然会产生视觉上的“脉冲”


有什么方法可以使这个转换平滑吗?

你需要用
SCNTransaction
添加你的代码,就像下面这样做动画

SCNTransaction类定义场景的SceneKit体系结构 内容更改,包括隐式动画:事务是 将多个节点更改组合在一起的单个原子操作, 几何体、材质或其他场景内容


哇,所以即使在苹果没有明确声明为可动画的属性上,我也可以这么做?不确定,但可以。你可以在这里阅读更多关于
SCNTransaction
的内容:@Elphaba,很高兴帮助你。@Elphaba,谢谢你的回复,我已经更新了动画持续时间。
    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()
}