1. 背景
今天自定义了一个view , 并截取了touchesBegan 事件,5s 里边可以正常触发此事件,但是6plus 里边 touchesBegan 和 touchesEnd 几乎同时调用,让我中间的动画做不成,如图
蓝色的view,点击右边一切都正常,点击左边就不正常,两个时间被同时调用了
2. 原因
当 点击蓝色view 的左侧时, 系统不知道用户点击是为了滑动navigation ,还是为了响应蓝色的view, 所以系统会等待用户的下一步动作,所以当用户没有滑动,而只是简单地点击事件时,再出发。所以触发开始时间和点击开始时间几乎是同时的。默认情况下,系统的navigation 用户只有在屏幕最左侧滑动时才会有响应,所以当蓝色view 的右边被点击时系统马上就知道点要触发哪一个了。所以一切正常,两个时间不会同时调用。
3.解决方法
告诉系统不要等待判断。
-(void)viewDidLoad{
[super viewDidLoad];
self.navigationController.interactivePopGestureRecognizer.delaysTouchesBegan = NO;
}
4.补充
有些时候可能不只有navigation 干扰点击时间,也许会是scrollview ,collectionview ,或者 tableview. 此时解决方法一样,如下:
table.delaysContentTouches = NO;
table.canCancelContentTouches = NO;