2012-04-26 36 views
2

我有一個分段控件,允許短手勢和長手勢。短手勢識別很好。長手勢方法被調用兩次。我爲什麼撓撓頭。Xcode/ios5 - 長觸手勢兩次

這是代碼來構建一個顏色工具欄的一部分:

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

這是長按方法的一部分:

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

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

通過查看日誌,我可以看到,長按每次按住按鈕時都會調用兩次方法。

任何想法我做錯了什麼,錯過,沒有做....?

+2

在這裏找到答案: http://stackoverflow.com/questions/3319591/uilongpressgesturerecognizer-gets-called-twice-when-pressing-down – Philip 2012-04-26 23:48:24

+0

嗨菲利普。感謝您的迴應。我看到那個帖子。那裏似乎有幾個相互矛盾的答案。你會建議什麼? – 2012-04-27 01:27:52

回答

7

我只是檢查狀態是什麼,但UIGestureRecognizerStateBegan和否則返回之前執行我想要的代碼。所以:

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

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

明白了..謝謝你.. – 2012-04-27 03:41:59

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 – 2014-07-04 08:50:49

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 
} 

}