解决在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;

}

你可能感兴趣的:(解决在UIScrollView上添加Slider造成手势冲突)