2016-05-06 4 views

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.