iOS 消除系统手势与Touch事件冲突 —点击不生效或延迟

之前在做语音聊天时发现过这个问题,当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地址 有兴趣的可以下载试试

你可能感兴趣的:(iOS 消除系统手势与Touch事件冲突 —点击不生效或延迟)