之前在做语音聊天时发现过这个问题,当UIView距离手机屏幕底部过近时,Touch事件与系统手势冲突,导致常常延迟1s才进入Touch事件,而且也接收不到touchCanceled的回调。
今天在写修改UIButton点击效果的时候又出现了这个问题,在修改这个问题后,想想还是在简书上把解决办法记录一下,让后来者可以不用走我的弯路。
- (void)clearSystemGestureEffect
{
NSArray *windows = [UIApplication sharedApplication].windows;
for (UIWindow *window in windows) {
for (UIGestureRecognizer *gesture in window.gestureRecognizers) {
//系统手势识别过程中不打断Touch时间的传递,用处:
//1. 可防止touch事件延迟(实测有TableView时延迟高达0.8s)
//2. 可防止Touch事件被系统手势捕获,即使被捕获,也能正常收到touchCanceled的回调
gesture.delaysTouchesBegan = NO;
gesture.delaysTouchesEnded = NO;
}
}
}
在需要的地方调用这个方法就好了。
demo地址 有兴趣的可以下载试试