iOS 開發中遇到的手勢衝突

未名小菜發表於2018-10-22

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;
複製程式碼

主要是要熟悉手勢代理

相關文章