UISlider + UISwipeGestureRecognizer第一次不工作

时间:2012-07-01 14:03:34

标签: xcode delegates uislider uiswipegesturerecognizer

在我的主视图控制器中,我有一个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的工作。 第一次滑动总是转到手势识别器处理程序。

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

感谢。

2 个答案:

答案 0 :(得分:1)

shouldReceiveTouch方法中,添加以下行:

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

这将指示您初次触摸所获得的类名称。

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

答案 1 :(得分:1)

在滑块上添加平移手势识别器,不指定目标或选择器 (它可以防止其他手势识别器工作) 将属性设置为NO可以使滑块正确跟踪。

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

就是这样!