我目前正在使用Scene Kit。我有两个视图控制器,它们都使用Scene Kit。在其中一个视图控制器中,我有一个名为scnView的主要场景视图,还有另一个名为titleView的场景视图。通过故事板添加了scnView和titleView。 titleView有一个节点,按下时应该从一个视图控制器转到另一个视图控制器。所以我创建了一个手势识别器并使用了命中测试。
在viewDidLoad中,我创建了一个手势识别器。
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(boardTapped:)];
NSMutableArray *gestureRecognizers = [NSMutableArray array];
[gestureRecognizers addObject:tapGesture];
[gestureRecognizers addObjectsFromArray:scnView.gestureRecognizers];
scnView.gestureRecognizers = gestureRecognizers;
在boardTapped方法中,我创建了两个CGPoints。一个检测scnView中的点击,一个检测titleView中的点击。
CGPoint p = [gestureRecognize locationInView:scnView];
NSArray *hitResults = [scnView hitTest:p options:nil];
CGPoint q = [gestureRecognize locationInView:_titleView];
NSArray *hitResultsTwo = [_titleView hitTest:q options:nil];
if([hitResults count] > 0){
SCNHitTestResult *result = [hitResults objectAtIndex:0];
if (result.node == boxOne)
{
//do something
}
if([hitResultsTwo count] > 0)
{
SCNHitTestResult *result = [hitResultsTwo objectAtIndex:0];
if(result.node == _titleView.menuBoxNode)
{
[self performSegueWithIdentifier:@"ShowMainMenu" sender:nil];
NSLog(@"Went into show main menu");
}
}
scnView上的点击被完美识别。但是对titleView的点击不被识别,并且segue没有发生。它实际上甚至没有进入if条件。还有一点。我在scnView视图中设置了它,这样如果发生双击,视图就会变回原来的位置。所以我有一个旋转的板,如果用户双击,则板移回原位。当电路板旋转并且双击titleView时,电路板会旋转回其位置,即使双击不在scnView中。