6

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

我确实找到了这个使用控制器的简短编程指南,它几乎暗示你应该在这种情况下将遥控器用作控制器,但我不禁认为有一种更简单的方法。前任。

 -(void)buttonPressBegan:(NSEvent*)event

等等(那不是真的……我只是希望有类似的东西)。什么是/是否有经认可的检测方法?

4

4 回答 4

10

Apple 建议使用 aUITapGestureRecognizer来检测按钮何时被释放。

#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 类参考

于 2015-09-15T11:45:55.167 回答
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;
于 2015-09-15T04:46:26.073 回答
1

如果您使用的是 UISplitViewController 之类的东西,则事件检测将发生在“DetailViewController”上。但是视图控制器仍然会被解雇!这是为了检测 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

    }
}
于 2017-01-19T10:00:22.003 回答
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

    }
}
于 2018-03-19T21:14:19.557 回答