Ich habe eine Wischgeste an eine UIView angehängt, die anscheinend nicht registriert wird, wenn sich der Swipe über den Unteransichten befindet.Werden Subviews automatisch als Listener den UIGestureRecognizers ihrer Superviews hinzugefügt?
0
A
Antwort
0
Angenommen, A ist die Stamm-UIView, die Sie erhalten möchten, und B ist eine Teilansicht von A, die Sie nicht wirklich erhalten möchten.
- , wenn Sie wollen keine Gesten auf B erhalten, können Sie userInteractionEnabled = false auf es
- , wenn Sie noch ein paar Gesten auf B empfangen wollen (aber nicht einen Seitenhieb)
Sie müssen B Unterklasse, so dass Sie diese Methode implementieren können, und diese Methode in B implementieren
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([gestureRecognizer isKindOfClass:UISwipeGestureRecognizer]) {
return NO;
}
return YES;
}
Sie können auch sehen, wie Sie von der Umsetzung Geste ein breites Spektrum an Funktionalität erhalten kann Recognizer: shouldReceiveTouch:
Ich hoffe, dass hilft!
0
Einer Lösung zu überprüfen ist, Gestik Punkt in Ihrem subview ist oder nicht, ist es eine nützliche C Funktion:
/* Return true if `point' is contained in `rect', false otherwise. */
bool CGRectContainsPoint(CGRect rect, CGPoint point)
, die Sie wie folgt verwenden können:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return CGRectContainsPoint(subview.frame, [touch locationInView:self.view]);;
}
0
Die andere Lösungen sollten funktionieren, aber möglicherweise ist es einfacher, subview.userInteractionEnabled = false
in der Unteransicht zu setzen, wenn es keine eigenen Event-Handler hat.