我正在尝试创建一个滑动菜单(有点像在Facebook / Twitter应用程序中),我的版本成功地使用平移手势来实现此效果。该类称为“SlideMenu”。
我在我的ViewController中实例化一个SlideMenu,然后在其上添加一堆UI元素作为子视图,例如UISliders,UIButtons等。
问题在于,平移手势似乎会干扰UISlider,因为它会滑动,但会在很短的距离后停止。我在答案(Gesture problem: UISwipeGestureRecognizer + UISlider)上找到了一段代码但是我不确定如何实现它或者它是否与我的设计一致。
代码是这样的:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UISlider class]]) {
// prevent recognizing touches on the slider
return NO;
}
return YES;
}
我尝试将它添加到我的SliderMenu类和我的ViewController中,但没有骰子。这是怎么回事?我必须设置什么代表(如果有的话)?谢谢
答案 0 :(得分:12)
基本上,在处理手势识别器的任何控制器或视图中。创建手势识别器时,可以将其委托设置为某个对象(可能是视图控制器),并使此对象实现UIGestureRecognizerDelegate
。其中一个委托回调是gestureRecognizer:shouldReceiveTouch
,因此您只需将上面放置的代码复制到对象(视图控制器)的实现中。
答案 1 :(得分:0)
我也有一些问题,问题的根源是
gestureRecogniser.cancelsTouchesInView
属性默认为true
,这在尝试拖动它时对UISlider造成了奇怪的延迟效果。
解决了
gestureRecogniser.cancelsTouchesInView = false
ps .:还要确保将delaysTouchesBegan, delaysTouchesEnded
设置为false