8
votes

EXCLUDE SUBVIEW DE L'UITAPGEGERERECOGNIZER

J'ai une sous-vision et un superview. Le SuperView a un uitapgesurerecognizer attaché à celui-ci.

UIView *superview = [[UIView alloc] initWithFrame:CGRectMake:(0, 0, 320, 480);
UIView *subview = [[UIView alloc] initWithFrame:CGRectMake:(100, 100, 100, 100);
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap);
superview.userInteractionEnabled = YES;
subview.userInteractionEnabled = NO;
[superview addGestureRecognizer:recognizer];
[self addSubview:superview];
[superview addSubview:subview];


0 commentaires

3 Réponses :


16
votes

Vous pouvez utiliser le délégué de reconnaissance de geste pour limiter la zone où il peut reconnaître les touches similaires à cet exemple: xxx

Notez que vous devez conserver la référence à votre parent et à votre vision des enfants (faites-la faire une instance variables?) Pour pouvoir les utiliser dans la méthode des délégués


0 commentaires

3
votes
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if(touch.view == yourSubview)
    {
        return NO;
    }
    else
    {
        return YES;
    }
}
Thanks : https://stackoverflow.com/a/19603248/552488

0 commentaires

2
votes

Pour SWIFT 3, vous pouvez utiliser View.Contains (point) code> au lieu de CGrectContainspoint code>.

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    if yourSubview.frame.contains(touch.location(in: view)) {
        return false
    }
    return true
}


0 commentaires