UIView中在其上滑动自动调用touchesCancelled

简介:

  在新的项目中,用了旧项目自定义的进度条,但是在其上滑动改变进度时,出现滑动时卡顿,造成无法丝滑的拖动改变进度。

定位问题:

  • 1.首先排除自定义控件的问题,因为在老项目中时没有问题的;
  • 2.在父控件中方法layoutSubviews添加打印,没有循环调用或者多次调用,不是布局问题;
  • 3.在进度条的touchesMoved方法中添加打印,滑动时一直正常打印;
  • 4.在进度条的touchesCancelled方法中添加打印,滑动时出现打印,定位问题。

分析问题:

  从定位问题可以得出在自定义的进度条和父控件中布局和手势的滑动是没有问题,但是为什么在滑动时会调用touchesCancelled呢?
UIView上滑动手势的调用顺序:

  • 1.正常的滑动手势调用顺序是:touchesBegan -> touchesMoved 多次 -> touchesEnded
  • 2.滑动手势被系统事件打断:touchesBegan -> touchesMoved 多次 -> touchesCancelled
  • 3.在滑动时并没有被系统事件打断,根据UIView的事件响应流程:Window -> Gesture -> View,分析可能时Gesture多个手势识别的问题;
  • 4.顺着相应手势的View查找,果然在自定义的标签控制器(UITabBarController)中添加了一个拖动收拾用于相应标签列表中控制器的专场动画,如图:
    image.png

    根据三种的文档,将该手势的cancelsTouchesInView设置为false即可。

文档:

UIGestureRecognizer
手势事件响应官方文档
事件的传递和响应机制

你可能感兴趣的:(UIView中在其上滑动自动调用touchesCancelled)