2015-03-17 6 views
6

को मैं एक UITapGestureRecognizer और एक UIView पर एक UIPanGestureRecognizer उस पर एक SKScene साथ की है। पैन इशारा पहचानकर्ता एक एसकेएनओडी को बाएं से दाएं स्थानांतरित करता है, और मैं टैप इशारा पहचानकर्ता चाहता हूं कि एसकेएनोड के बच्चे को पहचानने के लिए पैन करें। पैनिंग ठीक काम करता है, लेकिन मुझे नल का पता लगाने में परेशानी हो रही है - टैप जेस्चर प्रासंगिक विधि को सक्रिय करता है, लेकिन मुझे यकीन नहीं है कि निर्देशांक को दृश्य से दृश्य में कनवर्ट करने के लिए नोड में यह पता लगाने के लिए कि क्या टैप में से एक है बच्चों नोड्स।UITapGestureRecognizer: निर्देशांक परिवर्तित UIView से SKNode

UIView (इशारों से) → SKScene नोड

पैनिंग के नोड → बच्चे पैनिंग → मैं कैसे जाँच करते हैं एक एक टैप जेस्चर का स्पर्श समन्वय है कि क्या किसी भी SKNode है?

-(void)tapAction:(UITapGestureRecognizer*)sender{ 
if (sender.state == UIGestureRecognizerStateEnded) 
{ 
    // handling code 
    CGPoint touchLocation = [sender locationOfTouch:0 inView:sender.view]; 
    NSLog(@"TAP %@", NSStringFromCGPoint(touchLocation) 
     ); 
    for (SKLabelNode *node in _containerNode.children) { 

     if ([node containsPoint:[node convertPoint:touchLocation fromNode:self.parent]]) { 
      //This is where I want the tap to be detected. 
     } 

     CGPoint checkPoint = [node convertPoint:touchLocation fromNode:self.scene]; 
     NSLog(@"CheckPoint %@", NSStringFromCGPoint(checkPoint) 
      ); 
     //NSLog(@"iterating nodes"); 
     if ([node containsPoint:checkPoint]) { 
      NSLog(@"touch match %@", node); 

     } 
    } 
} 

}

उत्तर

6

अंत में मैं एक जोड़े को और अधिक करने की जरूरत है सुझाए गए कदमों से कदम - एसकेवीव → एसकेसीसीन से और फिर एसकेएनओड में कनवर्ट करना जिसमें नोड्स शामिल थे, मुझे परीक्षण मारा गया था।

CGPoint touchLocation   = [sender locationOfTouch:0 inView:sender.view]; 
    CGPoint touchLocationInScene = [[self.scene view] convertPoint:touchLocation toScene:self.scene]; 
    CGPoint touchLocationInNode  = [self.scene convertPoint:touchLocationInScene toNode:_containerNode]; 
3

मैंने पहले SceneKit उपयोग नहीं किया है, लेकिन डॉक्स से ऐसा लगता है जैसे आप SKView विधि convertPoint:toScene: उपयोग करने के लिए इशारा पहचानकर्ता के नल दृश्य से निर्देशांक बदलने की आवश्यकता लग रहा है निर्देशांक दृश्य निर्देशांक। आपको उस नोड को टैप करने के लिए अपने दृश्य में नोड्स का परीक्षण करने की आवश्यकता है।

4

आप देखें कन्वर्ट चाहिए दृश्य निर्देशांक convertPointFromView:

CGPoint touchLocationInView = [sender locationOfTouch:0 inView:sender.view]; 
CGPoint touchLocationInScene = [self convertPointFromView:touchLocationInView]; 

का उपयोग कर तो फिर तुम पता लगा सकते हैं जो लेबल नोड का उपयोग कर उपयोग किया गया था करने के लिए निर्देशांक,

for (SKLabelNode *node in self.children) { 

    if ([node containsPoint:touchLocationInScene]) { 
     //This is where I want the tap to be detected. 
    } 

} 
संबंधित मुद्दे