平移手势干扰 UISlider

Posted

技术标签:

【中文标题】平移手势干扰 UISlider【英文标题】:Pan gesture interferes with UISlider 【发布时间】:2012-03-07 12:40:44 【问题描述】:

我正在尝试创建一个滑动菜单(有点像 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,但没有骰子。这要去哪里?我必须设置什么代表(如果有的话?)谢谢

【问题讨论】:

【参考方案1】:

基本上,无论您在哪个控制器或视图中处理手势识别器。创建手势识别器时,可以将其委托设置为某个对象(可能是您的视图控制器)并让该对象实现UIGestureRecognizerDelegate。委托回调之一是gestureRecognizer:shouldReceiveTouch,因此您只需将上面放置的代码复制到对象(视图控制器)的实现中。

【讨论】:

谢谢。我错过的细节是将手势的委托设置为自我。现在一切都好! 很好的答案!!,减去 为我工作。但现在我应该在平移时调用的方法没有被调用。如何调用此方法? 我已经为此发布了一个问题,这里是link【参考方案2】:

我也遇到了一些问题,问题的根源是

gestureRecogniser.cancelsTouchesInView

属性默认为true,当我试图拖动它时,这对我的 UISlider 造成了奇怪的延迟效果。 这解决了

gestureRecogniser.cancelsTouchesInView = false

ps.:还要确保 delaysTouchesBegan, delaysTouchesEnded 设置为 false

【讨论】:

以上是关于平移手势干扰 UISlider的主要内容,如果未能解决你的问题,请参考以下文章

将垂直滚动手势传递给下面的 UITableView

在旋转视图上调整拖动手势

如何区分 UIScrollView 中的平移和滚动

禁用手势以下拉表单/页面表单模式演示

平移手势和滑动手势

SWRevealViewController 平移手势识别器问题