iOS 开发中遇到的手势冲突

UIGestureRecognizerDelegate 代理方法

处理一些同时进行的手势操作:

  1. 开始进行手势识别时调用的方法,返回NO则结束识别,不再触发手势,用处:可以在控件指定的位置使用手势识别
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
复制代码
  1. 手指触摸屏幕后回调的方法,返回NO则不再进行手势识别,方法触发此方法在window对象在有触摸事件发生时,调用gesture recognizer的touchesBegan:withEvent:方法之前调用,如果返回NO,则gesture recognizer不会看到此触摸事件。(默认情况下为YES)
 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // 点击的view的类名
    LSLog(@"%@", NSStringFromClass([touch.view class]));
    // 点击了tableViewCell,view的类名为UITableViewCellContentView,则不接收Touch点击事件
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"XXX"]) {
        return NO;
    }
    return  YES;
}
复制代码

3.手指按压屏幕后回调的方法,返回NO则不再进行手势识别,方法触发等

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePress:(UIPress *)press;

复制代码

4.是否支持多手势触发,返回YES,则可以多个手势一起触发方法,返回NO则为互斥 是否允许多个手势识别器共同识别,一个控件的手势识别后是否阻断手势识别继续向下传播,默认返回NO;如果为YES,响应者链上层对象触发手势识别后,如果下层对象也添加了手势并成功识别也会继续执行,否则上层对象识别后则不再继续传播

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

复制代码

5.下面这个两个方法也是用来控制手势的互斥执行的 (1) 这个方法返回YES,第一个手势和第二个互斥时,第一个会失效

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
复制代码

(2) 这个方法返回YES,第一个和第二个互斥时,第二个会失效

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
复制代码

主要是要熟悉手势代理

你可能感兴趣的:(iOS 开发中遇到的手势冲突)