簡介:
??在新的項目中,用了舊項目自定義的進度條,但是在其上滑動改變進度時,出現滑動時卡頓,造成無法絲滑的拖動改變進度。
定位問題:
- 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
即可。