[Apple] Handling Touches in Your View

J.Noma·2021년 12월 26일
0

iOS : 이벤트 처리

목록 보기
8/8

Apple문서: Handling Touches in Your View


학습목표

  • view가 터치 이벤트를 처리하게 하는 방법을 이해합니다
  • UITouch 객체에 대해 이해합니다

Overview

view가 responder로써 터치 event를 직접 처리
만약 custom view에 gesture recognizer를 사용하지 않을 계획이라면, view 자체적으로 직접 터치 event를 처리할 수 있습니다. view들은 responder이기에 Multi-Touch를 포함한 많은 타입의 event들을 처리할 수 있습니다. UIKit이 view에서 터치 event가 발생했음을 인지할 때, UIKit은 view의 responder메서드들 (touchesBegan()/touchesMoved()/touchesEnded)을 호출합니다. custom view에서 이 메서드들을 override해서 터치 event에 원하는대로 반응할 수 있도록 제공할 수 있습니다

터치 phase
이렇게 view에서 터치 처리를 위해 override한 메서드들은 서로 다른 phase에 대응됩니다.(터치 event 처리 과정을 phase로 나눈다면)

예로, 아래 그림에서 손가락이 화면을 터치할 때, UIKit은 UITouch 객체를 생성하고 터치 위치를 설정합니다. 그리고 phase 프로퍼티에 UITouch.Phase.began을 설정합니다. 그 상태에서 손가락이 화면에서 이동하면 터치 위치를 업데이트하고 phase를 UITouche.Phase.moved로 설정합니다. 마찬가지로, 손가락을 떼면 UITouch.Phase.ended로 설정하면서 터치 흐름이 끝납니다

event cancel
유사하게, 시스템은 언제든 이런 터치 흐름을 취소시킬지도 모릅니다. 예로, App 사용 중에 전화가 오면 App은 중단됩니다. 이 때, UIKit은 touchesCancelled() 메서드를 호출함으로써 view에게 이를 알립니다. 이런 cancel 메서드는 view의 데이터를 정리하는데 사용될 수 있습니다

UITouch
화면에 새로운 손가락의 터치가 발생하면 UIKit은 UITouch 객체를 생성합니다. 이 터치 객체들은 UIEvent 객체와 함께 전달됩니다. UIKit은 이 객체들로 터치들을 서로 구분하고 각각에 대해 다르게 대응할 수 있습니다

Multi-touch 인식은 별도로 세팅을 해야 한다
사실 기본 설정 하에서는, view는 두개 이상의 손가락이 터치하는 상황에서, 첫 번째 UITouch 객체만 받도록 되어 있습니다. 다른 터치 객체도 생성하려면 해당 view의 isMultipleTouchEnabled 프로퍼티를 true로 설정해야 합니다. 이 프로퍼티는 Interface Builder의 Attribute inspector에서도 설정할 수 있습니다

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글