https://developer.apple.com/documentation/uikit/uigesturerecognizerdelegate
"A set of methods implemented by the delegate of a gesture recognizer to fine-tune an app’s gesture-recognition behavior."
앱의 제스쳐 인식 동작을 정밀하게 조정하기 위한 제스쳐 리코그나이저의 딜리게이트에 의해 구현된 메소드 집합입니다.
@MainActor protocol UIGestureRecognizerDelegate
딜리게이트는 제스쳐 리코그나이저로부터 메시지를 받습니다. 그리고 이 메시지에 대한 딜리게이트의 응답은 제스쳐 리코그나이저의 작동에 영향을 미치도록 하거나 다른 제스쳐 리코그나이저와의 관계를 구체화할 수 있도록 합니다. 대표적으로 동시 인식을 허용하는 것이나 동적 실패 요구사항 설정 같은 것이 있습니다.
동적 실패 요구사항이 유용한 상황의 예시는 앱 내부에서 screen-edge 팬 제스쳐 리코그나이저가 뷰에 있는 상황입니다. 이 경우 뷰의 서브트리와 관련이 있는 다른 관련 제스쳐 리코그나이저를 실패하도록 요구할 수 있습니다. 이로써 다른 리코그나이저가 인식 프로세스 시작 이후 취소될 때 발생하는 그래픽 결함을 방지할 수 있습니다. 아래처럼 코드를 작성하는 것과 유사하게 구현할 수 있습니다.
let myScreenEdgePanGestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action:#selector(handleScreenEdgePan))
myScreenEdgePanGestureRecognizer.delegate = self
// Configure the gesture recognizer and attach it to the view.
...
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
guard let myView = myScreenEdgePanGestureRecognizer.view,
let otherView = otherGestureRecognizer.view else { return false }
return gestureRecognizer == myScreenEdgePanGestureRecognizer &&
otherView.isDescendant(of: myView)}