解决在UIScrollView上添加Slider造成手势冲突

在项目中要求播放视频的时候,左右滑动可以切换到上下一个视频,这样的话,就会在UIScrollView上添加Slider,然而这样会造成滑动手势冲突

通过查找资料得到:UIScrollView重载了hitTest方法,当手指touch的时候,UIScrollView会拦截所有event,然后等待150ms,在这段时间内,如果没有手指没有移动,当时间结束时,UIScrollView会发送tracking event到子视图上,并且自身不滑动。在时间结束前,手指发生了移动,那么UIScrollView就会进行滑动,从而取消发送tracking。所以是UIScrollView的问题。直接拖动UISlider,此时touch时间在150ms以内,UIScrollView会认为是拖动自己,从而拦截了event,导致UISlider接受不到滑动的event。但是只要按住UISlider一会再拖动,此时此时touch时间超过150ms,因此滑动的event会发送到UISlider上。

所以重写UIScrollView的hitTest方法就可以解决这个问题:当滑动UISlider时,使UIScrollView不可滑动。代码如下

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    

    

    /*

     直接拖动UISlider,此时touch时间在150ms以内,UIScrollView会认为是拖动自己,从而拦截了event,导致UISlider接受不到滑动的event。但是只要按住UISlider一会再拖动,此时此时touch时间超过150ms,因此滑动的event会发送到UISlider上。

     */

    UIView *view = [super hitTest:point withEvent:event];

    

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

    {

        //如果响应view是UISlider,则scrollview禁止滑动

        self.scrollEnabled = NO;

    }

    else

    {   //如果不是,则恢复滑动

        self.scrollEnabled = YES;

    }

    return view;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值