我正在继续别人的一个项目,在这个项目中我正在查看我不太理解的代码。我以前没有使用过 SceneKit ...所以我正在尽力学习。
我们在 SCNView 中显示一个对象。
我知道......当我说物体移动或旋转时,这实际上可能意味着物体是静止的,但相机正在向相反的方向移动或旋转。
我在 SCNView 上没有看到任何 GestureRecognisers ...这是否意味着有内置的 GestureRecognisers (例如在 SCNView::defaultCameraController 中)?如果是这样,如何稍微改变它们(而不是必须完全重建这种行为)?
我如何知道用户正在做某事(例如一根或两根手指拖动,或两根手指旋转)?比如,我可以实现一个 Delegate 函数或者设置一个闭包、Notification 或 GestureRecogniser 处理程序来查看发生了什么吗?我认为,如果用户正在移动对象(两指拖动),我必须更改相机的目标,以便当用户稍后“单指拖动”时,该对象似乎围绕不同的中心旋转? SCNSceneRendererDelegate::renderer,updateAtTime 已实现,但我担心无论用户是否正在做某事,每一帧都会调用它:我认为太频繁了。
如何“忽略”两指旋转手势,而不失去两指拖动功能?
感谢您的帮助! 沃特
@Wouter:您所描述的听起来像是 SceneKit 中的默认内置功能,您可以在场景视图定义本身上打开或关闭。
sceneView.allowsCameraControl = true/false
它不允许太多自定义(您实际上可以定义名为转盘的旋转行为,以及其他一些行为)。请记住:一旦您移动物体,请立即移动。内部相机对象中的相机被生成,并且视点切换到那个“不可见”相机。 (双击将返回到初始相机及其位置)
如果你想实现自己的机制,你必须与 Pan-Gestures 合作。这是一个很好的演示项目,向您展示了对象旋转时的一些替代方案。考虑一下你看一下: