在SCNView上启用用户交互后,如何使其仅水平旋转?

时间:2017-02-02 06:46:22

标签: ios objective-c xcode scenekit sceneview

我是SceneKit的新手,我正在尝试的是将dae文件加载到SCNScene,将此SCNScene设置为SCNView,启用用户交互,然后我可以通过手势旋转3D模型。到目前为止一切顺利,当我滑动或放大/缩小时,3D模型按照应有的方式工作。但是,我真正需要的是当手势(向右或向左滑动)发生时,3D模型只能水平旋转,而不能放大/缩小,我该怎么做才能实现? 这是我的代码:

width

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我不确定您是否可以使用- (void)viewDidLoad { // Add the scene etc.... UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)]; [_sceneView addGestureRecognizer:panRecognizer]; } - (void)panGesture:(UIPanGestureRecognizer *)sender { CGPoint translation = [sender translationInView:sender.view]; if (sender.state == UIGestureRecognizerStateChanged) { [self doPanWithPoint:translation]; } } - (void)doPanWithPoint:(CGPoint)translation { CGFloat x = (CGFloat)(translation.y) * (CGFloat)(M_PI)/180.0; CGFloat y = (CGFloat)(translation.x) * (CGFloat)(M_PI)/180.0; // Manuipulate the required (root?) node as you see fit _geometryNode.transform = SCNMatrix4MakeRotation(x, 0, 1, 0); _geometryNode.transform = SCNMatrix4Mult(_geometryNode.transform, SCNMatrix4MakeRotation(y, 1, 0, 0)); } 执行此操作 - 这似乎是与模型交互的基本规定。

如果您向场景添加平移手势,则可以随意操作模型中的任何节点:

{{1}}

显然,您可以省略第二个旋转步骤(或设置y = 0)以仅水平旋转。