내 응용 프로그램은 페이지 된 가로 스크롤 뷰를 사용합니다. 각 페이지에는 사용자가 탭할 수있는 UIControls가 있습니다.UIPanGestureRecognizer로 중복 된 UIScrollView 취소 동작
UIScrollView는 터치 및 스 와이프 취소 처리를 잘 처리합니다. 사용자가 충분히 빨리 스 와이프를 시작하면 항상 스 와이프됩니다. 사용자가 강조 표시된 상태를 활성화 할만큼 길게 터치하면 스크롤보기가 스 와이프를 시도하지 않습니다.
UIPanGestureRecognizer 하위 클래스로이 동작을 복제하려고하므로 내 scrollview 내에서 아래쪽으로 스 와이프에 응답 할 수 있습니다. 그러나 UIControls가 강조 표시되는 경우 취소 할 제스처를 얻을 수 없습니다.
지금까지 나는 다음과 같은 짓을했는지 :
self.refreshGesture.cancelsTouchesInView = YES;
self.refreshGesture.delaysTouchesBegan = NO;
self.refreshGesture.delaysTouchesEnded = NO;
이있는 UIScrollView가 접촉을 에 의견을 전달하는 방법을 복제하는 것, 그러나있는 UIScrollView의 팬 제스처 인식기가 취소 도착하는 방식을 복제하지 않습니다. self.refreshGesture
은 사용자가 얼마나 천천히 움직 였는지 또는 UIControl의 상태가 어떻든간에 항상 트리거됩니다.
내 제스처에서 대리인을 설정하려고 시도했지만 이것이 가능한 방법 일 수 있습니다. 하지만 나는 그 조합을 찾지 못했습니다. 예를 들어, UIControl에서 터치가 시작되는지 확인하는 것만으로 너무 자주 취소됩니다. 나는 또한 내 컨트롤에서 gestureRecognizerShouldBegin
을 무시하려고 시도했지만 해킹처럼 보일뿐 아니라 (UITextView의 제스처를 방해하는) 파급 효과가 있습니다.
이 GIF에서는 컨트롤이 터치로 활성화되고 스크롤 뷰가 스크롤되는 것을 볼 수 있습니다.