2016-12-12 10 views
1

터치 이벤트가 히트 뷰 또는 제스처로 전달 될 수 있음을 알고 있습니다. 하지만 뭔가 내 데모에 혼란스러워 :UIGestureRecognizer는 UIResponder 체인과 어떻게 작동합니까?

내 root view에 하나의 testview (UIView의 하위 클래스), 다른 하나는 "testBtnClicked"인 testBtn (UIButton)입니다. 그런 다음 루트보기에 UITapGestureRecognizer를 추가하고 작업을 "tapAction"으로 설정합니다.

문제는 온다 : "탭 동작"및 "touchsCancelled : withEvent"방법

내가 루트 뷰 터치가 ": withEvent touchsBegan"를 트리거합니다. 그것이 내가 기대 한 것입니다.

testView를 터치하면 위와 동일하게 작동합니다.

내가 testBtn을 터치하면 "testBtnClicked"메소드가 실행됩니다. 왜요?

rootview가 아닌 ​​testView를 터치하면 제스처가 인식되는 이유는 무엇입니까? testBtn을 터치해도 왜 인식되지 않습니까?

답변

4

아하! 앱 박사가 말한대로,

첫째

이 gestureRecognizers 터치를 인식하는 최초의 기회를 얻을 : 나는 대답을 얻었다 될 수

창이 뷰에 터치 객체의 전달을 지연시키는 제스처 있도록 인식기는 먼저 터치를 분석 할 수 있습니다. 지연 동안 제스처 인식기가 터치 제스처를 인식하면 윈도우는 터치 객체를 뷰에 전달하지 않으며 이미 인식 된 시퀀스의 일부인 뷰에 이전에 전송 된 모든 터치 객체를 취소합니다.

아이폰 OS 6.0에서

나중에는 기본 제어 동작 제스처 인식기 동작을 중복 방지 :

둘째, 아이폰 OS 6.0 이상에서있는 UIButton의 작업은 애플 박사는 말한다 또한으로, 중복 제스처 인식기 동작을 방지. 예를 들어 버튼의 기본 동작은 단일 탭입니다. 하나의 탭 제스처 인식기가 버튼의 부모보기에 부착되어 있고 사용자가 버튼을 탭한 경우 버튼의 동작 메소드는 제스처 인식기 대신 터치 이벤트를받습니다. 있는 UIButton, UISwitch, UIStepper, UISegmentedControl 및 UIPageControl에

  • 단일 손가락 단일 탭이만을 포함하는 제어의 기본 동작을 중첩 제스처 인식에 적용된다.
  • 슬라이더에 평행 한 방향으로 UISlider 손잡이를 한 손가락으로 스 와이프합니다.
  • 스위치에 평행 한 방향으로 UISwitch의 손잡이에 단일 손가락 팬 제스처가 있습니다.

는 이러한 컨트롤 중 하나의 사용자 지정 하위 클래스가 있다면 당신은, 기본 동작을 변경 컨트롤에 대신 부모 뷰에 직접 제스처 인식기를 연결합니다. 그런 다음, 제스처 인식기는 먼저 터치 이벤트를 수신합니다. 항상 그렇듯이 표준 UI 컨트롤의 기본 동작을 재정의 할 때 앱이 직관적 인 사용자 환경을 제공하는지 확인하려면 iOS 휴먼 인터페이스 가이드 라인을 읽어보십시오.