如何检查在scenekit iOS中点击的SCNNode

时间:2018-01-04 12:48:21

标签: ios objective-c xcode scenekit

目前我在SceneView.i中有三个SCNNode想要获取索引路径,就像使用Tapped一样。

这是我的Tap事件代码

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:gameVW];
SCNHitTestResult *hitTestResult = [[gameVW hitTest:touchPoint options:nil] firstObject];


SCNNode *hitNode = hitTestResult.node;
}

这是我创建SCNNodes的代码。

SCNBox *Box = [SCNBox boxWithWidth:2.0 height:2.0 length:2.0 
 chamferRadius:Radius];


 Box.firstMaterial.diffuse.contents = [UIColor whiteColor];
 SCNNode *cubeNode = [SCNNode nodeWithGeometry:Box];
 [ArrBoxNode addObject:cubeNode];

 self.sceneView.backgroundColor = [UIColor redColor];
 self.view.backgroundColor  = [UIColor grayColor];

 cubeNode.position = SCNVector3Make(4,0,0);

 [scene.rootNode addChildNode:cubeNode];
 self.sceneView.scene = scene;
 [self.sceneView sizeToFit];

我想要如果我点击第一个多维数据集而不是我应该获得indexpath Zero.how来实现这个目标?

1 个答案:

答案 0 :(得分:1)

我认为ArrBoxNode是存储多维数据集的数组。在这种情况下,您可以通过简单的for循环检查哪个节点被命中。

- (NSIndexPath*) indexPathFor:(SCNNode*) hitNode {
  for (int i = 0; i < [ArrBoxNode count]; i++) {
    SCNNode* node = ArrBoxNode[i];
    if (node == hitNode) {
      return [NSIndexPath indexPathForItem:i inSection:0];
    }
  }
  return nil;
}