iOS 제스처 인식 상세 정보
하나.터치 처리에서 UIEvent, UITOuch의 역할
iOS 시스템에서 사용자의 손가락이 화면에 닿기 시작하면 모든 손가락이 화면에서 떨어진다. 이 모든 과정을 multitouch sequence라고 한다.이 과정은 다소 건드릴 수 있다.
이 모든 과정에서 시스템은 관련 정보를 저장할 대상이 필요합니다. 이 대상이 바로 UIEvent입니다.새로운 터치 과정이 시작되면 새로운 UIEvent 대상이 구축되고 터치 상태의 변화에 따라 자신의 정보를 계속 업데이트하며 완전한 터치 과정은 UIEvent의 실례에 대응한다.
그럼 어터치는 또 뭐죠?앞에서 언급한 바와 같이 한 번의 터치 과정에서 여러 개의 손가락이 터치하고 있을 수 있다. 이른바 다중 터치 제어이고 한 개의 UITOuch의 실례는 한 손가락의 터치 과정에 대응한다. UITOuch의 실례에 대응하는 손가락의 터치 상태가 바뀌면 UITOuch의 상태가 업데이트된다.하나의 터치 과정은 여러 개의 터치일 수 있기 때문에 하나의 UIEvent 실례에 여러 개의 UItouch가 있을 수 있다
open var allTouches: Set? { get }
요약:
둘.뷰에서 UITOuch를 이용한 터치 처리
그렇다면 iOS는 어떻게 터치에 맞게 진행될까요?먼저 UItouch의 네 가지 상태를 간단히 소개합니다(UItouchPhase).
public enum UITouchPhase : Int {
case began // finger
case moved // finger
case stationary // finger
case ended // finger
case cancelled // ( home )
}
iOS에서 터치에 대한 처리는 UIresponder라는 클래스를 통해 이루어진다. 이것은 추상적인 클래스이고 UIView는 이 클래스를 계승하기 때문에 실제로 우리의 모든 터치 이벤트 처리는view를 통해 이루어진다.view는 터치 처리의 기본 단위입니다
따라서 실제 모든 UITOuch 실례에는view 속성이 있는데 이것은 그view를 가지고 있음을 나타낸다.view는 다음 네 가지 방법으로 터치 이벤트를 처리합니다.
// touch )
open func touchesBegan(_ touches: Set, with event: UIEvent?)
// touch
open func touchesMoved(_ touches: Set, with event: UIEvent?)
// touch
open func touchesEnded(_ touches: Set, with event: UIEvent?)
// touch
open func touchesCancelled(_ touches: Set, with event: UIEvent?)
위의 네 가지 메서드 매개변수에서 다음을 수행합니다.
요약:
셋.UIGestureRecognizer의 유래와 UItouch 및 UIEvent와의 관계
위에서 언급한 것은 모두 iOS의 비교적 밑바닥 처리 과정이다. 실제 개발에서 우리는 이 물건을 전혀 접하지 못할 수도 있다. 우리는 우리가 실제적으로 UIGestureRecognizer를 이용하여 사용자의 터치 사건을 처리한 것을 알고 있다. 그러면 UIGestureRecognizer와 위에서 언급한 UITOuch와 UIEvent, UIResponder 사이에는 어떤 관계가 있는가?
왜 UIGestureRecognizer가 있는지
앞에서 논의한 바와 같이 만약에 우리가 사용자의 긴 제스처를 식별하고자 한다면 이것은 우리가 새로운 종류의 계승 UIView를 정의한 다음에 이 새로운 종류에서 터치스 Begen 등 방법을 실현하여 제스처 식별을 하고 해당하는 처리를 해야 한다는 것을 의미한다. 이 과정은 사실상 매우 번거롭다. 편리한 방법이 없을까?
이를 위해 iOS는 UIGestureRecognizer를 도입하여 자주 사용하는 제스처를 봉인(예를 들어 UITApGestureRecognizer)한 다음에 우리는 더욱 높은 차원에서 처리할 수 있다.
UIGestureRecognizer의 작동 방식
UIGestureRecognizer를 사용할 때, 이것은 보통view에 직접 추가됩니다. 예를 들어 다음과 같습니다.
let tap = UITapGestureRecognizer(target: self, action: "handleTap:")
self.view.addGestureRecognizer(tap)
실제로 UIGestureRecognizer의 작업 원리는 매우 간단하다. UIView와 마찬가지로 TouchesBegin 등 네 가지 방법을 실현했다. 이로써 자신의 제스처 식별 과정을 실현했고 식별이 성공할 때 target에 해당하는 처리를 하도록 알렸다.Gesture Recognizer의 지위는 실제로view의 지위와 대등하며 UItouch와 UIEvent가 같은 처리 방식을 가지고 있다
터치의 전달 과정
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.