19

方向パッドの右ボタンを押したままにすると、マリオが右に走り続ける方法を知っていますか? 同様に、UIButton が押されている間、そのアクションを継続的に発生させたいと考えています。これはUIButtonで可能ですか? そうでない場合、タッチ処理メソッドを特定の方法でオーバーライドすることで、これを UIImageView で行うことは可能ですか? 実際、UIButton でこれを実行しようとする前に、タッチ処理メソッドによってチェックされたいくつかの UIImageViews (D-Pad として機能するように配置されたもの) がありましたが、物事が乱雑になり始めたので、これは UIButton でより簡単に実行できると考えました。切り替えました。継続的で静止した(動かされていない)ダウンタッチを認識する方法を知っている人は誰でも共有してください.

4

4 に答える 4

32

ボタンを使用せず、マルチタッチと NSTimer を使用します。

インターフェイス内でビューローカルの NSTimer オブジェクトを作成し、それを使用してタイマーを開始/キャンセルします

-(void)movePlayer:(id)sender {
   <Code to move player>
}

-(void)touchesBegan:(NSSet*)touches  withEvent:(UIEvent*)event {
    timer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(movePlayer:) userInfo:nil repeats:YES];
}

-(void)touchesEnded:(NSSet*)touches  withEvent:(UIEvent*)event {
   if (timer != nil) 
      [timer invalidate];
      timer = nil;
}

-(void)touchesMoved:(NSSet*)touches  withEvent:(UIEvent*)event {
    if (timer != nil) {
       [timer invalidate];
       timer = nil;
    }
}

このようにして、事前定義された間隔でイベントを繰り返すことができ、ボタンに頼る必要がなく、探している繰り返し動作を得ることができます。touchesMoved トリガーに注意してください。ユーザーが指を動かすと、タイマーがキャンセルされ、プレーヤーの動きが停止します。

于 2009-05-24T05:08:16.430 に答える