解決在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;
}