在项目中要求播放视频的时候,左右滑动可以切换到上下一个视频,这样的话,就会在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;
}