1. 程式人生 > >解決在UIScrollView上新增Slider造成手勢衝突

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

}