[iOS] - UIGestureRecognizer


UIGestureRecognizer 정리


사용자가 앱을 사용하기 위해서는 단순히 UI만 존재하는 것이 아니라 UI와 상호작용을 할 수 있어야 한다. 버튼을 터치한다던가, 스와이프를 한다던가, 드래그하는 동작과 같은 상호작용을 통해 사용자는 앱을 조작할 수 있다. 여기에 사용할 수 있는 것이 바로 UIGestureRecognizer이다.

UIGestureRecognizer는 이름에서부터 짐작할 수 있듯이, UI에 사용자가 하는 gesture를 recognize 해주는 역할을 하는 클래스인 것 같다.

공식 문서의 설명을 보면 UIGestureRecognizer는 concrete gesture recognizer들을 위한 기본이 되는 클래스다.

image

Gesture recognizer 객체나 gesture recognizer는

  • 연속적인 터치(아니면 다른 입력)을 인식하기 위한 로직
  • 인식한 이후 반응하는 것

이 두 가지를 분리한다.

Gesture recognizer 중 하나가 이런 일반적인 제스쳐들이나 제스쳐의 변화를 감지하면 각각 target 객체에 action message를 보낸다.

사람이 할 수 있는 제스쳐가 굉장히 다양하기 때문에, UIGestureRecognizer의 concrete class(구현 클래스)도 굉장히 많다.

  • UITapGestureRecognizer
  • UIPinchGestureRecognizer
  • UIRotationGestureRecognizer
  • UISwipeGestureRecognizer
  • UIPanGestureRecognizer
  • UIScreenEdgePanGestureRecognizer
  • UILongPressGestureRecognizer
  • UIHoverGestureRecognizer

UIGestureRecognizer 클래스는 모든 concrete gesture recognizer를 구성할 수 있는 일반적인 행위들을 정의한다. UIGestureRecognizerDelegate 프로토콜을 채택한 객체인 delegate와 상호작용해서 특정 행위들을 커스터마이징하는 것도 가능하다.

Gesture recognizer는 특정 뷰와 그 뷰의 자식 뷰들에 hit-test 된 터치들에 대해 동작한다. 따라서 뷰와 꼭 연관되어 있어야 한다. 이런 연관성을 만들어주기 위해 꼭 UIView의 addGestureRecognizer(_:) 메서드를 수행해야 한다. Gesture Recognizer는 뷰의 respoonder chain에 참여하진 않는다.

  • 참고
  • https://developer.apple.com/documentation/uikit/uigesturerecognizer