개요
회사에서 touch 관련 업무를 맡게되어 알아보던 중 swift에서 touch를 구현하는 방법에는
1. UITouch
2. UIGestureRecognizer
로 크게 두 가지가 있다는 걸 발견했습니다~!
따라서 이 둘을 어떻게 사용하고, 어떤 방식으로 동작하는지 알아보도록 하겠습니다.
1. UITouch
developer.apple.com/documentation/uikit/uitouch
스크린에서 발생하는 터치에 관한 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
일련의 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를 사용해야겠네요!
'iOS > 개념' 카테고리의 다른 글
[iOS] Process, Thread, Task, sync, async, serial, concurrent 용어 정리 (0) | 2021.12.08 |
---|---|
[iOS] UIScrollView 내부에 statusBar 높이만큼 inset이 들어가는 문제 - contentInsetAdjustmentBehavior (2) | 2021.11.08 |
[iOS] addTarget, @objc, #selector (0) | 2021.02.07 |
[iOS] App States (0) | 2021.01.24 |
[iOS][업뎃중] iOS 주요 개념 정리 (0) | 2021.01.24 |