如何检测Apple TV Siri Remote按键?

时间:2015-09-15 02:37:43

标签: objective-c tvos

根据Apple TV界面guideline,当你不在游戏的主菜单时,你应该使用菜单按钮作为暂停按钮(在这种情况下,它)应该返回Apple TV OS菜单)。但是,我找不到你应该如何检测遥控器的硬按钮输入(而不是屏幕上的软按钮)。

我确实找到this使用控制器的简短编程指南几乎似乎暗示你应该在这种情况下使用遥控器作为控制器,但我不能帮助,但认为有一个更简单的方法。离。

 -(void)buttonPressBegan:(NSEvent*)event
等等(这不是真的......我只是希望有类似的东西)。什么是/有制裁方法来检测这个吗?

4 个答案:

答案 0 :(得分: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 :(得分: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;

答案 2 :(得分:1)

如果你正在使用类似UISplitViewController的东西,事件检测将在&#34; DetailViewController&#34;上发生。但视图控制器仍将被解雇!这是为了检测按下MENU按钮而不是覆盖其行为。

 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

    }
}

答案 3 :(得分:0)

In Swift 3
override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {

    guard let type = presses.first?.type else {
        return
    }

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

    }
}