2

短いジェスチャと長いジェスチャの両方を許可するセグメント化されたコントロールがあります。短いジェスチャ認識は問題ありません。ロングジェスチャメソッドが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回呼び出されていることがわかります。

私が間違っていること、欠けていること、していないことなどのアイデアはありますか?

4

3 に答える 3

7

状態がUIGestureRecognizerStateBegan以外であるかどうかを確認し、それ以外の場合は、必要なコードを実行する前に戻ります。それで:

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

   // do something in response to long gesture
}
于 2012-04-27T02:12:37.237 に答える
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
}

}

于 2015-01-28T18:07:48.153 に答える
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;
      }
}
于 2014-07-04T08:26:59.650 に答える