UIGestureRecognizerDelegate

Panther·2021년 8월 2일
0

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."

앱의 제스쳐 인식 동작을 정밀하게 조정하기 위한 제스쳐 리코그나이저의 딜리게이트에 의해 구현된 메소드 집합입니다.

Declaration

@MainActor protocol UIGestureRecognizerDelegate

Overview

딜리게이트는 제스쳐 리코그나이저로부터 메시지를 받습니다. 그리고 이 메시지에 대한 딜리게이트의 응답은 제스쳐 리코그나이저의 작동에 영향을 미치도록 하거나 다른 제스쳐 리코그나이저와의 관계를 구체화할 수 있도록 합니다. 대표적으로 동시 인식을 허용하는 것이나 동적 실패 요구사항 설정 같은 것이 있습니다.

동적 실패 요구사항이 유용한 상황의 예시는 앱 내부에서 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)}

0개의 댓글