Programing/Hololens

GestureRecognizer Class 와 GestureSettings 속성

Ezzi 2017. 11. 9. 11:02
반응형




홀로렌즈 앱 개발 시 제스쳐 인식을 위한 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를 모두 등록 할 수 있다.






반응형