2015-10-10 7 views
5

मुझे लगता है कि मुझे कुछ मूलभूत याद आ रही है, लेकिन मुझे ठीक से ओवरराइड करने के लिए बटन प्रेस नहीं मिल सकते हैं।टीवीओ ओवरराइडिंग प्रेसबैगन

मैं मेनू बटन प्रेस का पता लगाने की कोशिश कर रहा हूं, इसलिए मैं pressesBegan: ओवरराइड करता हूं और UIPressTypeMenu के लिए परीक्षण करता हूं। विधि मेनू बटन दबाती है, और मेरा कोड निष्पादित करती है, लेकिन फिर तुरंत ऐप से बाहर निकलने के साथ ही चलती है।

यहां मेरी ओवरराइड विधि है। क्या कोई जानता है कि मैं क्या गलत कर रहा हूं? क्या स्वचालित मेनू निकास को ओवरराइड करने के लिए मुझे कुछ और चाहिए? यह लगभग दो उत्तरदाताओं की तरह है। बाएं टैप और दाएं टैप के साथ वही सौदा। वे पहचाने जाते हैं, मेरा कोड आग लगती है, लेकिन फिर फोकस बदल जाता है क्योंकि मैंने पूरी तरह से ईवेंट को संभाला नहीं है।

मैंने ऐप के पहले दृश्य नियंत्रक में कोड की कोशिश की और मेनू ठीक से ओवरराइड हो गया है। फिर, मैंने एक खाली दृश्य स्थापित किया और दृश्य संख्या 2 के रूप में दृश्य प्रस्तुत किया और मुझे ओवरराइड करने के तरीके नहीं मिल सके।

- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 

      [(UIImageView *) [self.view viewWithTag:100] setUserInteractionEnabled:NO]; 

     } 
     if(press.type == UIPressTypePlayPause) { 
      // play and pause code 
     } 
    } 
} 


-(void) pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    // 
    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 
      // do ButtonA job 
      NSLog(@"test"); 
     } 
     if(press.type == UIPressTypePlayPause) { 
      // do ButtonX job 
     } else { 


     } 
    } 

} 

-(void) pressesChanged:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    // Works fine! 
    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 
      // do ButtonA job 
     } 
     if(press.type == UIPressTypePlayPause) { 
      // do ButtonX job 
     } 
    } 

} 

-(void) pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    // Works fine! 
    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 
      // do ButtonA job 
      NSLog(@"cancelled"); 
     } 
     if(press.type == UIPressTypePlayPause) { 
      // do ButtonX job 
     } 
    } 
} 
+0

आप इस को हल किया? मैं मेनू बटन को कैप्चर करने की भी कोशिश कर रहा हूं। –

उत्तर

2

एप्लिकेशन बाहर निकलने रहा है क्योंकि आप pressesEnded:withEvent: संदेश वापस प्रत्युत्तर श्रृंखला के शीर्ष करने के लिए प्राप्त करने के लिए अनुमति दे रहे हैं। आपको उस विधि को ओवरराइड करना चाहिए, और कॉल super पर कॉल करें यदि आप ऐप से बाहर निकलना नहीं चाहते हैं (यहां सावधान रहें, हालांकि: यदि उपयोगकर्ता बाहर निकलने के लिए मेनू का उपयोग नहीं कर सकता है, तो वे आपके साथ बेहद निराश होंगे)

बाएं और दाएं तीर फोकस परिवर्तनों को ट्रिगर कर रहे हैं क्योंकि उन्हें इशारा पहचानकर्ताओं के साथ संभाला जाता है, pressesBegan/pressesEnded विधियों के साथ नहीं, इसलिए इससे कोई फर्क नहीं पड़ता कि आपका दृश्य उन पर ओवरराइड करता है या नहीं।

Event Handling Guide for iOS में इस बारे में अधिक जानकारी है कि इशारा पहचानकर्ता और UIResponder विधियां एक दूसरे के साथ कैसे बातचीत करती हैं।

+0

संभावित मदद के लिए धन्यवाद! असल में मैंने प्रेस ओवरडिन भी किया था, दबाया गया, दबाया गया और प्रेस रद्द कर दिया गया। क्षमा करें मुझे उन्हें अपने प्रश्न में भी रखना चाहिए था। मैं किसी भी तरीके से सुपर कॉल नहीं कर रहा हूं। – jpsquare

+0

और आप सुनिश्चित हैं कि उन तरीकों को बुलाया जा रहा है? डीबगर में ब्रेकपॉइंट सेट करने या सुनिश्चित करने के लिए कुछ लॉगिंग जोड़ने का प्रयास करें। क्या आप उन तरीकों के लिए कोड शामिल करने के लिए अपने प्रश्न को संशोधित कर सकते हैं? –

+0

असल में दबाए गए प्रतीत होता है प्रतीत नहीं होता है। हालांकि, मेरे पहले दृश्य प्रेस पर एंडेड को कॉल नहीं किया जा रहा है लेकिन मेनू बटन अभी भी ओवरराइड किया जा रहा है। – jpsquare

0

आप पर gameScene इस भूल नहीं है:

override func didMoveToView(view: SKView) { 
    super.didMoveToView(view) 
} 
संबंधित मुद्दे