当按钮的位置位于控制器的最底部时,touchDown事件会有所延迟,例如控制器最底部有一个语音按钮,长按语音按钮说话,这时你会发现事件会有所延迟,这是因为跟系统屏幕的底部边缘手势冲突了
方法一:
在你的控制器中,重写下面这个方法
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures {
if (isIPhoneX) { // isIPhoneX是一个宏,判断是否为iPhoneX及以上机型
return UIRectEdgeNone;
}
return UIRectEdgeBottom;
}
方法二: (在控制器的viewDidAppear:方法和viewWillDisappear:添加以下代码)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
for(UIGestureRecognizer* gesture in self.view.window.gestureRecognizers){
gesture.delaysTouchesBegan = NO;
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
for(UIGestureRecognizer* gesture in self.view.window.gestureRecognizers){
gesture.delaysTouchesBegan = YES;
}
}
个人更推荐方法二,方法二中之所以在viewWillDisappear:方法中设置回yes,是因为window是一个单例,如果改变了属性值会影响全局