在我的主视图控制器中,我有一个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的工作。 第一次滑动总是转到手势识别器处理程序。
为什么呢?以及如何解决这个问题?
感谢。
答案 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;
就是这样!