2015-09-15 26 views
6

Apple TVのインターフェースguidelineによれば、ゲームの場合は、ゲームのメインメニューにないときにメニューボタンを一時停止ボタンとして使用することになっています(この場合、Appleに戻る必要があります) TV OSメニュー)。しかし、私はあなたのリモコンからハードボタンの入力を検出するはずのどこに(画面上のソフトボタンとは対照的に)見つけることができません。 Apple TV Siriリモートボタンの検出方法を教えてください。

私は はほとんどは、あなたがこの場合のコントローラとしてリモートを使用することになっていることを意味すると思わコントローラを使用する thisショートプログラミングガイドを見つけたが、私は助けるが、簡単な方法があると思うことはできません。例。

-(void)buttonPressBegan:(NSEvent*)event 

など(これは本当にそうではありません...私はちょうどそのようなものがあると思っています)。それは/これを検出する認可された方法はありますか?

答えて

10

Apple suggestsUIPressType年代の完全なリストについては

#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"); 
    } 
} 

UIPress Class Referenceを参照してください。

+1

また、正解がありましたが、これは正しいです。 Justinのソリューションは、ViewControllerを通過してメソッドをSpriteKitシーンに向ける必要がありましたが、ジェスチャ関連のものはSpriteKitシーンの直接コードを許可していました。また、プレスが上/下/左/右の方向にあった場合に戻って*ラフ*の位置データを検出できるという追加の利点もあります。欠点は、私がジャスティンの答えでできるように、開始/終了/変更/キャンセルを決定する方法を理解できないことです。しかし、それは私のプロジェクトにとって直ちに重要ではありません! – mredig

+1

私は愚かです...前回のコメントからの私の主な苦情は、実際に答えで扱われたようです。私はそれをテストしていないと認めますが、認識装置の状態を検出できれば、終了したかどうかを検出できます。 – mredig

+1

カスタムロジックを実行した後にイベントを渡してデフォルトの動作を得る方法はありますか?例えば、私はメニュー・プレスを傍受し、その上で行動し、それを通常の動作にしたいと思っています。 –

3

もうすぐです!これらは、あなたが望むメソッドです:基本的にタッチ同等物のように機能します。ボタンが離されたときに検出するUITapGestureRecognizerを使用して

- (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"で行われます。しかし、ビューコントローラはまだ解雇されます!これは、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 

    } 
} 
関連する問題