質問

連続キープレスを手に入れることは可能ですか?

キーコマンドを使用して、外付けキーボードに押されている矢印キーを傍受するが、1枚につき1回のコールを取得します。キーが押されている限り、Xミリ秒ごとに複数のコールを取得したいのですが、キーが押されたときとリリースされたときに呼び出します。

これが私のコードです:

- (NSArray *)keyCommands
{
    UIKeyCommand *upArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow
                                                modifierFlags:0
                                                       action:@selector(upArrow:)];
    UIKeyCommand *downArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow
                                                  modifierFlags:0
                                                         action:@selector(downArrow:)];
    UIKeyCommand *leftArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputLeftArrow
                                                  modifierFlags:0
                                                         action:@selector(leftArrow:)];
    UIKeyCommand *rightArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputRightArrow
                                                   modifierFlags:0
                                                          action:@selector(rightArrow:)];
    UIKeyCommand *leftArrowCmd = [UIKeyCommand keyCommandWithInput:UIKeyInputLeftArrow
                                                     modifierFlags:UIKeyModifierCommand
                                                            action:@selector(leftArrowCmd:)];
    UIKeyCommand *rightArrowCmd = [UIKeyCommand keyCommandWithInput:UIKeyInputRightArrow
                                                      modifierFlags:UIKeyModifierCommand
                                                             action:@selector(rightArrowCmd:)];
    UIKeyCommand *lCmd = [UIKeyCommand keyCommandWithInput:@"l"
                                             modifierFlags:UIKeyModifierCommand
                                                    action:@selector(lCmd:)];
    UIKeyCommand *rCmd = [UIKeyCommand keyCommandWithInput:@"r"
                                             modifierFlags:UIKeyModifierCommand
                                                    action:@selector(rCmd:)];
    UIKeyCommand *mCmd = [UIKeyCommand keyCommandWithInput:@"m"
                                             modifierFlags:UIKeyModifierCommand
                                                    action:@selector(mCmd:)];
    return @[upArrow, downArrow, leftArrow, rightArrow, leftArrowCmd, rightArrowCmd, lCmd, rCmd, mCmd];
}
.

役に立ちましたか?

解決

はiOS 7では実際には不可能であるようです。

他のヒント

キーボードのキーを押すと、キーボードのキーを押すと、キーボードのキーを押した後に最初に呼び出されるため、連続キーを押すことができます。ただし、ユーザーがキーを離したり、最初のキーを押しながら別のキーを押したりしているかどうかを知ることはできません。そのため、できることに制限があります。

この制限は、アプリが複数のキーを同時に押し続けることを必要としない限り、問題ありません。ユーザーが一度に1つのキーを押すだけであると想定できる場合は、これを使用して連続キーを押します。

編集:これがfalseステートメントのように思われるコメントを得ました。それは間違いです!これが完全な例です:

#import "ViewController.h"

@interface ViewController ()
{
    bool keyDown;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    keyDown = NO;
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (NSArray*)keyCommands
{
    if(keyDown==YES) {
        printf("Key released\n");
        keyDown = NO;
    }
    UIKeyCommand *upArrow = [UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow
                                                modifierFlags:0
                                                       action:@selector(upArrow:)];
    return @[upArrow];
}

-(void)upArrow:(UIKeyCommand*)keyCommand
{
    printf("Key pressed\n");
    keyDown = YES;
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}
@end
.

上矢印ボタンを押すと、出力コンソールに「キーを押す」というテキストが表示されます。リリースすると、テキスト "keyがリリースされました"が表示されます。述べたように、1つの制限があります。上向きを保持してから同時に別のキーを押すと、コードは上向きキーがリリースされていると仮定されます。

上矢印キーを押したときに起こることです:

  1. まず、メソッドキーコマンドを2回呼び出します(なぜ2回?)
  2. Uparrowメソッドが1回呼び出され、変数キーダウンはyesに設定され、テキスト "キー押された"が印刷されます。
  3. これはあなたがキーを解放するときに起こることです:

    1. メソッドキーコマンドは1回呼び出されます。 KEYDOWN= YES。
    2. のテキストは印刷されます。

      上記のように、この方法では制限があります。最初に矢印を押しながら別のボタンを押しながら保持している場合、このコードは上向き矢印ボタンをリリースしたと信じるでしょう。あなたは明らかにあなたのアプリで継続的なキーを押すためのタイマーでこれを包む必要があります。

PRO TIP -

からfalseを返したので、私の矢印キーはブロックされました
-(BOOL) canPerformAction:(SEL)action withSender:(id)sender 
.

あなたが作成したあなた自身のセレクタを必ず確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top