"Discover when and how to build your own gesture recognizers"
고유한 제스쳐 리코그나이저를 빌드하는 적합한 때와 방법에 대해 알아봅니다.
UIKit
에 내장된 제스쳐 리코그나이저가 원하는 동작을 제공하지 못할 때 커스텀 제스쳐 리코그나이저를 정의할 수 있습니다. UIKit
은 탭, long-press, 팬, 스와이프, 회전, 핀치에 대한 연속적인 터치를 처리하는 설정 가능한 제스쳐 리코그나이저를 정의합니다. 다른 터치 연속 혹은 버튼 누르기와 관련이 있는 제스쳐를 처리하려면, 커스텀 제스쳐 리코그나이저를 정의할 수 있습니다.
또한, 앱에서 이벤트 처리를 단순화 할 수 있도록 커스텀 제스쳐 리코그나이저를 사용할 수도 있습니다. 예를 들어 드로입 앱 샘플의 Leveraging Touch Input은 입력을 캡처하기 위해 제스쳐 리코그나이저를 사용하고, 이를 화면에 표시합니다. 이에 대한 내용은 Figure 1에서 볼 수 있습니다.
Figure 1 Touch input captured by a custom gesture recognizer
커스텀 제스쳐 리코그나이저를 정의하려면, UIGestureRecognizer
(혹은 이것의 하위 클래스 중 하나)를 서브클래싱해야 합니다. 소스 파일 상단에 UIGestureRecognizerSubclass.h
헤더 파일(Objective-C의 경우)을 임포트하거나 UIKit.UIGestureRecognizerSubclass
모듈(스위프트의 경우)을 임포트해야 합니다. Listing 1에서 표현한 것과 같습니다. 이 헤더 파일은 커스텀 제스쳐 리코그나이저를 구현하기 위해 오버라이드해야 하는 메소드와 속성을 정의합니다.
Listing 1 Importing the UIGestureRecognizerSubclass behavior
import UIKit
import UIKit.UIGestureRecognizerSubclass
커스텀 서브클래스에서 이벤트를 처리하기 위해 필요한 메소드 무엇이든 구현할 수 있습니다. 예를 들어 만약 제스쳐가 터치 이벤트로 구성된 경우 touchesBegan(:with:)
, touchesMoved(
:with:)
, touchesEnded(:with:)
, touchesCancelled(
:with:)
메소드를 구현해야 합니다. 제스쳐 리코그나이저의 상태 속성을 업데이트하려면 들어오는 이벤트를 사용해야 합니다. UIKit
은 인터페이스에 있는 다른 객체에 대한 상호작용을 조정하기 위해 제스쳐 리코그나이저 상태를 사용합니다.
상태 머신의 상태 및 전환에 대해 알아봅니다. 상태 머신은 제스쳐 리코그나이저의 기반입니다.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/implementing_a_custom_gesture_recognizer/about_the_gesture_recognizer_state_machine
https://velog.io/@panther222128/About-the-Gesture-Recognizer-State-Machine
만약 제스쳐가 특정 패턴과 관련이 있다면, 이를 위해 이산적 제스쳐 리코그나이저 구현을 고려해보시기 바랍니다.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/implementing_a_custom_gesture_recognizer/implementing_a_discrete_gesture_recognizer
https://velog.io/@panther222128/Implementing-a-Discrete-Gesture-Recognizer
특정 패턴에 일치하기 어려운 제스쳐를 구현하려고 하거나 터치 입력을 모으기 위한 제스쳐 리코그나이저 사용을 원할 때, 연속적 제스쳐 리코그나이저를 생성하시기 바랍니다.
https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/implementing_a_custom_gesture_recognizer/implementing_a_continuous_gesture_recognizer
https://velog.io/@panther222128/Implementing-a-Continuous-Gesture-Recognizer
구체화된 제스쳐 리코그나이저들의 베이스 클래스입니다.
https://developer.apple.com/documentation/uikit/uigesturerecognizer
https://velog.io/@panther222128/UIGestureRecognizer