Meine App verwendet eine ausgelagerte horizontale Bildlaufansicht. Jede Seite hat UIControls, auf die der Benutzer tippen kann.Doppeltes UIScrollView-Abbruchverhalten mit UIPanGestureRecognizer
UIScrollView erledigt die Löschung von Berührungen und Wischen sehr gut. Wenn der Benutzer beginnt, schnell genug zu wischen, ist es immer ein Wischen. Wenn der Benutzer lange genug auflegt, um den markierten Status zu aktivieren, versucht die Bildlaufansicht nicht, zu wischen.
Ich versuche, dieses Verhalten mit einer UIPanGestureRecognizer-Unterklasse zu duplizieren, so dass ich auf Downward-Swipes innerhalb meiner Scrollview reagieren kann. Allerdings kann ich die Geste nicht abbrechen, wenn UIControls hervorgehoben wird.
Bisher habe ich folgendes getan:
self.refreshGesture.cancelsTouchesInView = YES;
self.refreshGesture.delaysTouchesBegan = NO;
self.refreshGesture.delaysTouchesEnded = NO;
Dies scheint die Art und Weise UIScrollView geht berührt - Ansichten zu duplizieren, aber es dupliziert nicht die Art und Weise, dass UIScrollView pan Gestenerkenner wird abgebrochen. self.refreshGesture
wird immer ausgelöst, egal wie langsam der Benutzer wischt oder wie der Status der UIControls ist.
Ich habe versucht, den Delegierten auf meine Geste zu setzen, und das könnte der Weg sein. Aber ich habe keine Kombination gefunden, die funktioniert. Zum Beispiel, nur zu überprüfen, ob die Berührung innerhalb eines UIControl startet, bricht zu häufig ab. Ich habe auch versucht, in meinen Kontrollen zu überschreiben, aber das scheint wie ein Hack und hat weitreichende Implikationen (stört beispielsweise UITextView Gesten).
In diesem GIF können Sie sehen, dass das Steuerelement bei Berührung aktiviert wird und die Bildlaufansicht den Bildlauf abbricht, wenn dies geschieht. Aber meine nach unten Pfanne Geste wird auf die gleiche Art und Weise nicht abgebrochen: