手势问题:UISwipeGestureRecognizer + UISlider

MrD*_*rDB 23 iphone event-handling gesture-recognition uislider uigesturerecognizer

有手势相关的问题.我实现了UISwipeGestureRecognizer以获得向左和向右滑动事件,并且工作正常.然而,我面临的问题是我在同一视图中的UISlider不是很好玩.滑块的滑动被误认为是向左/向右滑动.

以前有人遇到过这个问题,有什么想法可以纠正吗?

非常感谢.

以下是视图控制器中包含的代码:

 - (void)viewDidLoad {

            [super viewDidLoad];

                //Setup handling of LEFT and RIGHT swipes
             UISwipeGestureRecognizer *recognizer;

                recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
                [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
                [[self view] addGestureRecognizer:recognizer];
                [recognizer release];

                recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
                [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
                [[self view] addGestureRecognizer:recognizer];
                [recognizer release];
        }

    -(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {

      if (recognizer.direction == UISwipeGestureRecognizerDirectionRight) {
       NSLog(@"Swipe Right");
       //Do stuff
      }

      if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) {
       NSLog(@"Swipe Left");
       //Do stuff
      }
    }
Run Code Online (Sandbox Code Playgroud)

Lil*_*ard 57

处理此问题的最简单方法可能是防止手势识别器看到滑块上的触摸.您可以通过将自己设置为委托,然后实施来实现

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([touch.view isKindOfClass:[UISlider class]]) {
        // prevent recognizing touches on the slider
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,滑块实际上可能具有接收触摸的子视图,因此您可以superview沿着链向上走,沿途测试每个视图.