点击按住说话按钮事件有延迟

问题原因:

该问题原因是由于系统的某些手势 delaysTouchesBegan 属性为 YES,当按钮处在某些特定位置时触摸事件会先被这些系统的手势拦截,系统不响应才会继续分发,而按钮的 UIControlEventTouchDown 事件是需要立即响应的,所以会导致事件类型为 UIControlEventTouchDown 的响应有延迟

解决方案:

在自定义聊天页面中将这些系统手势的 delaysTouchesBegan 手动置为 NO,这样当屏幕接收到触摸事件后在系统手势进行响应的同时就会把该事件传递下去

相关代码:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    for (UIGestureRecognizer *gesture in self.view.window.gestureRecognizers) {
        gesture.delaysTouchesBegan = NO;
    }
}