2015-09-15 8 views
6

ऐप्पल टीवी इंटरफ़ेस guideline के अनुसार, जब गेम की बात आती है तो आपको गेम बटन के मुख्य मेनू में नहीं होने पर मेनू बटन को पॉज़ बटन के रूप में उपयोग करना होता है (जिस स्थिति में इसे ऐप्पल पर वापस जाना चाहिए टीवी ओएस मेनू)। हालांकि, मुझे आपके रिमोट से हार्ड बटन इनपुट का पता लगाने के लिए कहीं भी नहीं मिल रहा है (स्क्रीन पर मुलायम बटन के विपरीत)।ऐप्पल टीवी सिरी रिमोट बटन प्रेस का पता लगाने के लिए कैसे?

मुझे लगता है नियंत्रकों लगभग सूचित करते हैं कि आप इस मामले में एक नियंत्रक के रूप में रिमोट का उपयोग करना चाहिए रहे हैं लगता है कि उपयोग करने के लिए this कम प्रोग्रामिंग गाइड किया था, लेकिन मैं मदद नहीं कर सकता लेकिन वहाँ एक सरल तरीका है लगता है। पूर्व।

-(void)buttonPressBegan:(NSEvent*)event 

आदि (यह वास्तविक नहीं है ... मुझे उम्मीद है कि ऐसा कुछ ऐसा है)। इसका पता लगाने का एक स्वीकृत तरीका क्या है?

उत्तर

10

Apple suggests एक UITapGestureRecognizer का उपयोग करते समय एक बटन जारी किया गया है पता लगाने के लिए।

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController { 
    UITapGestureRecognizer *tapRecognizer; 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    tapRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTap:)]; 
    tapRecognizer.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypeMenu]]; 
    [self.view addGestureRecognizer:tapRecognizer]; 
} 

-(void)handleTap:(UITapGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) { 
     NSLog(@"Menu button released"); 
    } 
} 
UIPressType की एक पूरी सूची के UIPress Class Reference करना देखें

+1

जस्टिन वास का भी सही जवाब था, लेकिन यह एक और सही है। जस्टिन के समाधान को व्यू कंट्रोलर के माध्यम से जाना और स्प्रिटकिट दृश्य में विधियों को निर्देशित करना आवश्यक था, जबकि स्पेशिटकिट दृश्य में सीधे संकेत के लिए इशारा किया गया था। यदि प्रेस एक ऊपर/नीचे/बाएं/दाएं दिशा में था, तो लौटने से * किसी न किसी * स्थितित्मक डेटा का पता लगाने में सक्षम होने का अतिरिक्त लाभ भी है। नकारात्मकता यह है कि मैं यह नहीं समझ सकता कि कैसे जस्टिन के उत्तर के साथ शुरू/समाप्त/बदला/रद्द किया जा सकता है, लेकिन यह मेरे प्रोजेक्ट के लिए तत्काल महत्वपूर्ण नहीं है! – mredig

+1

मैन मैं मूर्ख हूं ... ऐसा लगता है कि पिछली टिप्पणी से मेरी प्राथमिक शिकायत वास्तव में उत्तर में संबोधित की गई थी। मैं मानता हूं कि मैंने इसका परीक्षण नहीं किया है, लेकिन यदि आप पहचानकर्ता की स्थिति का पता लगा सकते हैं, तो यह मुझे पता लगाने की अनुमति देगा कि यह समाप्त हो गया है या नहीं! – mredig

+1

क्या कस्टम तर्क निष्पादित होने के बाद डिफ़ॉल्ट व्यवहार प्राप्त करने के साथ ईवेंट को पास करने का कोई तरीका है? उदाहरण के लिए, मैं मेनू प्रेस को अवरुद्ध करना चाहता हूं, उस पर कार्य करना चाहता हूं, और उसके बाद इसे सामान्य व्यवहार निष्पादित करना चाहता हूं। –

3

आप करीब हैं! ये वे विधियां हैं जिन्हें आप चाहते हैं: वे मूल रूप से स्पर्श समकक्षों की तरह काम करते हैं।

- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIEvent *)event; 
- (void)pressesChanged:(NSSet<UIPress *> *)presses withEvent:(UIEvent *)event; 
- (void)pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIEvent *)event; 
- (void)pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(UIEvent *)event; 
1

यदि आप UISplitViewController की तरह कुछ उपयोग कर रहे हैं तो ईवेंट डिटेक्शन "DetailViewController" पर होगा। लेकिन दृश्य नियंत्रक अभी भी खारिज कर दिया जाएगा! यह पता लगाने के लिए है कि मेनू बटन दबाया गया था और इसके व्यवहार को ओवरराइड नहीं किया गया था।

override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) { 
    guard let type = presses.first?.type else { 
     return 
    } 

    switch type { 
    case UIPressType.Menu : 
     //Handle this here 
    default : break 

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