iOS/개념

[Swift] UITouch vs UIGestureRecognizer

누알라리 2021. 3. 7. 16:32

개요

 

회사에서 touch 관련 업무를 맡게되어 알아보던 중 swift에서 touch를 구현하는 방법에는

1.  UITouch

2. UIGestureRecognizer

로 크게 두 가지가 있다는 걸 발견했습니다~!

 

따라서 이 둘을 어떻게 사용하고, 어떤 방식으로 동작하는지 알아보도록 하겠습니다.

 


 

1. UITouch

 

developer.apple.com/documentation/uikit/uitouch

 

Apple Developer Documentation

 

developer.apple.com

스크린에서 발생하는 터치에 관한 location, size, movement, force 를 나타내는 객체 입니다.

사용자는 event handling을 위한 응답 객체인 UIEvent를 통해 touch 객체에 접근할 수 있습니다.

touch 오브젝트는 다음 사항들을 포함합니다.

  • touch가 발생한 view나 window
  • view나 window에서의 touch의 위치
  • touch의 대략적인 radius
  • 애플펜슬, 3D 터치를 지원하는 기기를 위한 touch의 force

touch에 관련된 변화, 이벤트에 관해서도 나타냅니다.

touch에 관련된 구문은 다음과 같은것들이 있습니다.

 

  • UITouchPhaseBegan
  • UITouchPhaseMoved
  • UITouchPhaseStationary
  • UITouchPhaseEnded
  • UITouchPhaseCancelled

2. UIGestureRecognizer

 

developer.apple.com/documentation/uikit/uigesturerecognizer

 

Apple Developer Documentation

 

developer.apple.com

일련의 touch를 인식하고 해당 touch에 대한 작동을 분석해서 구체적인 제스처 인식기로 판정(?) 하고 대상 객체에 작업 메세지를 보냅니다.

gesture recognizer 는 view의 responder chain에 참여하지 않고, 이걸 사용하려면 addGestureRecognizer 메소드를 등록해줘야합니다.

 

UIGestureRecognizer로 인식할 수 있는 제스쳐들은 다음과 같은 것들이 있습니다.

 

  • UIGestureRecognizerStatePossible
  • UIGestureRecognizerStateBegan
  • UIGestureRecognizerStateChanged
  • UIGestureRecognizerStateEnded
  • UIGestureRecognizerStateCancelled
  • UIGestureRecognizerStateFailed
  • UIGestureRecognizerStateRecognized

 


 

UITouch와 UIGestureRecognizer을 알아보니,

둘의 차이점은 Touch는 정말 날 것 그대로의 window나 view에서의 touch 객체를 받을 수 있고,

Gesture는 받은 Touch가 어떤 Gesture를 뜻하는지 판정하고 그에 맞는 Gesture 객체를 받을 수 있는 것이네요.

 

그래서 UITouch의 이벤트가 UIGestureRecognizer의 이벤트보다 훨씬 빨리 불립니다.

 

제가 이번에 맡은 프로젝트는 제스처를 인식하는 것 보단 Touch의 begin, moved, canceled에 접근해야할 일이 많으니 이번 프로젝트에는 UITouch를 사용해야겠네요!