需求:同一時間只識別一種手勢(如捏合或平移,二擇一)。實現 UIGestureRecognizerDelegate 方法,根據視圖判斷是否允許同時識別。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
// 若兩手勢不在同一視圖上,禁止同時識別
if (gestureRecognizer.view != otherGestureRecognizer.view) {
return NO;
}
// 同一視圖上可根據手勢類型進一步限制
return YES; // 或根據具體需求返回 NO
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
// 針對 UIPinchGestureRecognizer 和 UIPanGestureRecognizer 互斥
Class pinchClass = [UIPinchGestureRecognizer class];
Class panClass = [UIPanGestureRecognizer class];
BOOL isPinch = [gestureRecognizer isKindOfClass:pinchClass] || [otherGestureRecognizer isKindOfClass:pinchClass];
BOOL isPan = [gestureRecognizer isKindOfClass:panClass] || [otherGestureRecognizer isKindOfClass:panClass];
if (isPinch && isPan) return NO; // 捏合與平移互斥
return YES;
}
pinchGestureRecognizer.delegate = self;
panGestureRecognizer.delegate = self;
// self 需符合 UIGestureRecognizerDelegate 協議
Delegate 方法精細控制手勢識別並發邏輯,滿足互斥需求。