0

在我的主视图控制器中,我有一个 uislider。同时我将 UISwipeGestureRecognizer 分配给 self.view 因为我想检测整个视图上的手势。

问题是每当我滑动滑块时,手势识别器也会捕捉到它,而且滑块的行为很不稳定而且不好。

这是我的代码(手势部分)

UISwipeGestureRecognizer* singleSwipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)];
    [singleSwipeRight setDirection:(UISwipeGestureRecognizerDirectionRight)];
    singleSwipeRight.numberOfTouchesRequired = 1;
    singleSwipeRight.delegate = self;
    [self.view addGestureRecognizer: singleSwipeRight];

正如我在HERE中所读到的,为了防止这种情况,只需实现以下委托:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {


    if ([touch.view isKindOfClass:[UISlider class]]) {
        // prevent recognizing touches on the slider
        //NSLog(@"no");
        return NO;
    }
    return YES;

}

但有趣的是,这仅在我第二次滑动 UISlider 时才有效。第一次滑动总是转到手势识别器处理程序。

为什么?以及如何解决这个问题?

谢谢。

4

2 回答 2

1

在您的shouldReceiveTouch方法中,添加以下行:

NSLog(@"touch.view class = %@", [touch.view className]);

这将指示您初次接触时所获得的类名。

您还应该检查该phase物业;您可能只想YES在滑动完成后返回(取决于您的应用程序的工作方式)。

于 2012-07-01T14:20:46.537 回答
1

在滑块上添加平移手势识别器并且不指定目标或选择器(它会阻止其他手势识别器工作)将属性设置为 NO 允许滑块正确跟踪。

    UIPanGestureRecognizer* panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:nil action:nil];
[slider addGestureRecognizer:panGesture];
panGesture.cancelsTouchesInView = NO;

而已!

于 2013-03-20T09:16:21.637 回答