홀로렌즈 앱 개발 시 제스쳐 인식을 위한 GestureRecognizer 사용에 관한 이슈
GestureRecognizer 클래스란?
https://docs.microsoft.com/en-us/uwp/api/windows.ui.input.gesturerecognizer
제스쳐 인식을 위해 Event 를 Callback 으로 등록 할 수 있도록 API를 제공한다.
ex) Example Code private GestureRecognizer ActiveRecognizer; void Start() { ActiveRecognizer = new GestureRecognizer(); ActiveRecognizer.SetRecognizableGestures(GestureSettings.Tap); ActiveRecognizer.TappedEvent += TappedCallback; ActiveRecognizer.StartCapturingGestures(); } void OnDestroy() { ActiveRecognizer.CancelGestures(); } private void TappedCallback(InteractionSourceKind source, int tapCount, Ray ray) { // Some Code } |
GestureRecognizer 클래스를 사용하기 위해서는
GestureSettings 이라는 Enumeration 속성을 입력하여 어떤 제스쳐를 인식할 것인 가에 대해서 초기화를 해주어야 한다.
GestureSettings Enumeration에 대한 상세 정보는 다음 링크에 있다.
https://docs.microsoft.com/en-us/uwp/api/windows.ui.input.gesturesettings
GestureSettings 속성은 bitwise 연산으로 다중 항목 선택이 가능한데
ex) bitwise 연산으로 다중 속성을 등록 함
private GestureSettings RecognizableGesures = GestureSettings.Tap | GestureSettings.DoubleTap | GestureSettings.Hold | GestureSettings.NavigationX | GestureSettings.NavigationY;
헌데 이 과정 중에서 GestureSettings.ManipulationTranslate Enum 값을 추가 하면 Error가 나게 된다.
ex) Error Code RecognizableGesures = GestureSettings.Tap | GestureSettings.DoubleTap | GestureSettings.Hold | GestureSettings.ManipulationTranslate | GestureSettings.NavigationX | GestureSettings.NavigationY; ActiveRecognizer.SetRecognizableGestures(RecognizableGesures); |
하여
GestureRecognizer 클래스의 인스턴스를 2개 생성하여
ex) Example Code void Start() { ActiveRecognizer = new GestureRecognizer(); ActiveRecognizer.SetRecognizableGestures(GestureSettings.Tap | GestureSettings.DoubleTap | GestureSettings.Hold | GestureSettings.NavigationX | GestureSettings.NavigationY | GestureSettings.NavigationZ); ActiveRecognizerForManipulation = new GestureRecognizer(); ActiveRecognizerForManipulation.SetRecognizableGestures(GestureSettings.ManipulationTranslate); } |
다음과 같이 분리 해주어야 Manipulation 과 Navigation Event를 모두 등록 할 수 있다.