2012-04-19 28 views
0

私は2つの異なるタッチイベントを持つボタンを実装しようとしています。ユーザーがボタンをタップすると(短時間触れると)、actionTappedがトリガーされ、ユーザーがボタンを長押ししてactionTouchedをトリガーするとします。2つの異なるタッチイベントを持つ1つのボタン

This linkはアイデアを与えるかもしれませんが、何度も何度も繰り返しアクションを繰り返します。

+0

チェックこの[http://stackoverflow.com/questions/4013896/detecting-long-tap-on-iphone](http://stackoverflow.com/質問/ 4013896 /検知 - 長い - タップオン - アイホン) –

答えて

0

OK、ここに私の解決策です。 scheduledTimerWithTimeIntervalは、それが触れる可能分間隔です:

- (IBAction) micButtonTouchedDownAction { 
    self.micButtonTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(micButtonAction:) userInfo:nil repeats:YES]; 
    self.micButtonReleased = FALSE; 
} 

- (IBAction) micButtonTouchedUpInsideAction { 
    self.micButtonReleased = TRUE; 
} 

- (IBAction) micButtonTouchedUpOutsideAction { 
    self.micButtonReleased = TRUE; 
} 

- (void) micButtonAction:(NSTimer *)timer { 
    [self.micButtonTimer invalidate]; 
    self.micButtonTimer = nil; 

    if(self.micButtonReleased) { 
     NSLog(@"Tapped"); 
    } 
    else { 
     NSLog(@"Touched"); 
    } 
} 
1

あなたはlongPress関数を実行するtouchDownイベントにタイマーを設定したいと思うでしょう。 touchUpイベントでは、タイマーをキャンセルできます。むしろ単純ではありません。

+0

これは良いアイデアですが、どのような2つのイベントを区別するのですか? – giorashc

+0

最初の(短いタップ)コードは、タイマーを設定する直前のtouchDownイベントで実行できます。長押しのコードはタイマーイベントで実行できます。 – cdstamper

+1

でも、同じタッチで両方のアクションが実行されます(タイマーがオフになった場合...) – giorashc

0

私は、次の操作を行います:あなたのタッチで

  1. ダウン方法:現在の時刻を保存する(touchDownTimeそれを呼び出すことができます)。あなたのタッチアップ方法で
  2. :時間が>必要な時間を経過した場合は、他のアクション1(ロングタッチ)は、アクション2(短いタッチ)を行うのですか秒

    2.2に変換time elapsed = current time - touchDownTime

    2.1を計算

1

のiOS SDKは、あなたのニーズに最適です2つのジェスチャー認識機能が含まれます。

  • UITをapGestureRecognizer
  • UILongPressGestureRecognizer

それに任意のアクションを装着せずにボタンを作成します。次に、2つのジェスチャーレコグナイザを作成します。ジェスチャレコグナイザはそれぞれのタイプの1つで、それぞれのアクションに割り当てられます。次に、ジェスチャ認識ツールをボタンに付けます。

関連する問題