美文网首页
关于ScrollView上放滑动控件响应问题

关于ScrollView上放滑动控件响应问题

作者: Johnny_Chang | 来源:发表于2016-06-14 17:04 被阅读1199次

    在项目开发时遇到一个问题,我在UIViewController上面直接创建了一个UIScrollView,把UIScrollerView作为一个子视图添加到了UIViewController,

    又再UIScrollerView中添加了一个UISlider的组件,在手势滑动的过程中,很难滑动到UISlider这个控件,经常是滑动的时候UIScrollerView进行了滚动,

    而UISlider这个控件没有滑动,让人很抓狂。

    上网具体去了解了一下UIScrollerView的详解,终于彻底明白了问题出在哪里

    下面引用一下前辈的总结,因为自己觉得没有他总结的详细

    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不可滑动。

    但是又出现了一个问题,我的UIScrollerView是直接继承了UIScrollerView,在UIViewController中是无法重写的UIScrollerView的hitTest方法的,所以需要重新创建一个view,继承UIScrollerView,然后再重写上述方法,然后再导入UIViewController中就可以轻松实现了。

    来自别人的博客

    以前我做项目也遇到过类似问题,当时找了两个方法

    //[self.myScrollView setCanCancelContentTouches:YES];

    //[self.myScrollView setDelaysContentTouches:NO];

    发现效果不好,今天才知道是hitTest的原因。

    相关文章

      网友评论

          本文标题:关于ScrollView上放滑动控件响应问题

          本文链接:https://www.haomeiwen.com/subject/dweudttx.html