`
啸笑天
  • 浏览: 3436513 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

UIPanGestureRecognizer手势影响UISlider拖动的问题及解决办法

 
阅读更多

最近在使用UISlider控件控制音频播放进度时,遇到一个问题,即:UISlider所在的UIView上已经添加了UIPanGestureRecognizer类型手势,用来处理向右拖动整个View时取消显示,但这样一来,拖动UISlider就变成了响应手势,而无法正常使用UISlider。

经过一番查找资料和尝试,问题得到解决,方法如下:

给UIPanGestureRecognizer添加代理(UIGestureRecognizerDelegate),UIGestureRecognizerDelegate中有一个方法:

 

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

在进入手势识别事件之前,先进入该方法,对那些不需要响应手势事件的事件(如拖动UISlider),可以通过返回一个NO型布尔值不响应手势识别;而对于需要响应手势识别的情况,只需要返回一个YES就可以。

下面举例说明:

首先添加手势识别,并给手势识别指定代理

⋯⋯

  UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer allocinitWithTarget:selfaction:@selector(handlePanGesture:)];

   [panRecognizer setMaximumNumberOfTouches:1];

    [panRecognizer setDelaysTouchesBegan:TRUE];

   [panRecognizer setDelaysTouchesEnded:TRUE];

    [panRecognizer setCancelsTouchesInView:TRUE];

    //为手势识别器设置代理

    panRecognizer.delegate = self;

    [self.view addGestureRecognizer:panRecognizer];

    [panRecognizer release];

⋯⋯

然后,实现UIGestureRecognizerDelegate的方法:

 

// 当拖动UISlider时会被误认为是手势,所以在这个判断一下

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

    if([touch.view isKindOfClass:[UISlider class]])

        return NO;

    else

        return YES;

}

 

ps其他手势其他控件以此类推

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics