2015-09-19 6 views
5

के उप-वर्ग में टीवीओएस यूआईपी्रेस जेस्चर को पहचाना नहीं जा रहा है, मैं एसकेसीसीन के उप-वर्ग में एक प्रेस का जवाब देने की कोशिश कर रहा हूं। मैं प्रतिक्रियाकर्ता प्रेस को ओवरराइड कर सकता हूं मेरे व्यू कंट्रोलर के अंदर बस ठीक है, लेकिन जब मैं अपने प्रेस को स्थानांतरित करता हूं तो मेरे एसकेसीन उप वर्ग में ओवरराइड किया जाता है, मुझे अब कोई कॉल नहीं मिलती है।एसडीएससीन

नीचे मेरी pressesEnabled ओवरराइड है, जो के रूप में ViewController के अंदर इरादा

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    print("press") 
} 

किसी को पता है कि कैसे एक SKScene के अंदर बटन प्रेस प्राप्त करने के लिए काम करता है?

+0

SKScene पहले प्रत्युत्तर है? – jtbandes

+0

यह नहीं है, लेकिन यह ध्यान देने योग्य हो सकता है कि सभी स्पर्श घटनाओं को मारा जा रहा है। –

+0

क्या यह काम करता है यदि आप इसे पहले उत्तरदाता बनाते हैं? क्या आप स्टैक ट्रेस/दृश्य को अग्रेषित करने के तरीके को देखने के लिए टच इवेंट हैंडलर के अंदर ब्रेकपॉइंट सेट कर सकते हैं? – jtbandes

उत्तर

7

आप SKScene करने के लिए अपने ViewController विषयों से प्रेस की घटनाओं को अग्रेषित करने, इसलिए जैसे जरूरत है ...

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    gameScene.pressesBegan(presses, withEvent: event) 
} 

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    gameScene.pressesEnded(presses, withEvent: event) 
} 
gameScene (SKScene) में

तो कुछ की तरह कार्य करें:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    for press in presses { 
    switch press.type { 
    case .UpArrow: 
     print("Up Arrow") 
    case .DownArrow: 
     print("Down arrow") 
    case .LeftArrow: 
     print("Left arrow") 
    case .RightArrow: 
     print("Right arrow") 
    case .Select: 
     print("Select") 
    case .Menu: 
     print("Menu") 
    case .PlayPause: 
     print("Play/Pause") 
    } 
    } 
} 

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    print("Presses Ended.") 
} 

"एरो "प्रेस तब भेजे जाते हैं जब उपयोगकर्ता टचपैड के किनारों को टैप करता है, लेकिन सिम्युलेटर में पहचाना नहीं जाता है। "चयन करें" भेजा जाता है जब टचपैड का केंद्र टैप किया जाता है।

मुझे आशा है कि इससे मदद मिलती है!

+0

यही वह समय है जो मैं समय के लिए कर रहा हूं, लेकिन अगर संबंधित प्रेस फ़ंक्शन सुपर क्लास एसकेसीसीन के भीतर निहित हैं तो क्या यह संकेत नहीं है कि संबंधित कार्यों को आंतरिक रूप से टीवीओएस के अंदर इस्तेमाल किया जा रहा है? –

1

उपयोग pressesBegan रिमोट एक भौतिक बटन (मेनू, PlayPause), और pressesBegan या pressesEnded एप्पल टीवी की ट्रैकपैड के लिए मैप करने के लिए (बाएं, सही, आदि)। यदि आप ट्रैकपैड के "बटन" पर दबाते हैं और दूसरे स्थान पर जाते हैं और रिलीज करते हैं, तो विधि pressesEnded नहीं कहा जाता है, आप इसे भौतिक बटन से नहीं कर सकते हैं।

प्रेस शुरू हुआ:

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
     print("Press began") 
     for item in presses { 
      if item.type == .PlayPause { 
        print("PlayPause") 
      } 
     } 
} 

प्रेस समाप्त:

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
     print("Press Ended") 
     for item in presses { 
      if item.type == .RightArrow { 
       print("Right Arrow") 
      } 
     } 
    }