2012-04-26 13 views
2

私は、短いジェスチャと長いジェスチャの両方を可能にするセグメント化されたコントロールを持っています。短いジェスチャー認識は問題ありません。長いジェスチャー方法が2回呼び出されています。私はなぜ頭が痛いですか。Xcode/ios5 - 2回呼び出されるロングタッチジェスチャ

これは、色のツールバーを構築するためのコードの一部です:

UILongPressGestureRecognizer* longPressGestureRec = 
    [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; 
    longPressGestureRec.minimumPressDuration = 1.5; 
    //longPressGestureRec.cancelsTouchesInView = NO; 
    [colorControl addGestureRecognizer:longPressGestureRec]; 

これはlongPress方法の一部です:

-(void) longPress:(id)sender { 
    NSLog(@"%s", __FUNCTION__);  
    switch (colorIndex) { 
     case 0: 
      [self showMoreWhiteColors:(id)sender]; 
      break; 

     case 1: 
      [self showMoreRedColors:(id)sender]; 
      break; 

ログを見ることによって、私はそのlongPressを見ることができますメソッドはボタンを保持するたびに2回呼び出されます。

私が間違ってやっているアイデア、欠けている、やっていない....?

+2

ここに答え http://stackoverflow.com/questions/3319591/uilongpressgesturerecognizer-gets-called-twice-when-pressing-down – Philip

+0

こんにちはフィリップを。応答していただきありがとうございます。私はそのポストを見た。そこにはいくつかの矛盾する答えがあるようです。何をお勧めしますか? –

答えて

7

私は、状態がUIGestureRecognizerStateBegan以外のものであるかどうかをチェックし、必要なコードを実行する前にそれ以外の場合は返されます。したがって:

-(void) longPressGesture:(UIGestureRecognizer*)gesture 
{ 
    if (gesture.state != UIGestureRecognizerStateBegan) 
     return; // discard everything else 

    // do something in response to long gesture 
} 
+0

ありがとうございました.. –

1

またはこれを行うことができます。

-(void)handleLongPress:(UILongPressGestureRecognizer *)gesture { 
     switch(gesture.state){ 
     case UIGestureRecognizerStateBegan: 

      // Do your stuff here. 
      NSLog(@"State Began"); 
      break; 
     case UIGestureRecognizerStateChanged: 
      NSLog(@"State changed"); 
      break; 
     case UIGestureRecognizerStateEnd: 
      NSLog(@"State End"); 
      break; 
     default: 
      break; 
     } 
} 
+0

ありがとう!私は次のバージョンのためにこれを保つつもりです。+1 –

3
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture { 
if(UIGestureRecognizerStateBegan == gesture.state) { 
    // Called on start of gesture, do work here 
} 

if(UIGestureRecognizerStateChanged == gesture.state) { 
    // Do repeated work here (repeats continuously) while finger is down 
} 

if(UIGestureRecognizerStateEnded == gesture.state) { 
    // Do end work here when finger is lifted 
} 

}

関連する問題