9

Ich habe ein paar UIScrollView s in meiner Ansicht Controller. Ich möchte eine Ansicht überlagern, die einen 2-Finger-Wisch über UIPanGestureRecognizer erfasst, der die Wischgesten UIScrollView nicht aufzeichnet.Capture nur UIView 2 Finger UIPanGestureRecognizer

Wenn ich mit einer 2-Finger-Schwenk-Geste eine transparente Ansicht über meinen Inhalt mache, werden meine Fingertipps und 1 Fingerüberstreichungen nicht erkannt. Ich versuchte, die Methode pointInside: zu überschreiben, um NO zurückzugeben, aber dann notiert es nicht meine 2-Finger-Swipe.

Der Effekt ähnelt dem 4-Finger-Swipe, um Apps zu ändern.

+0

so wollen Ihre scrollviews nicht zu erfassen 2 Finger klaut? – peko

+0

das ist 1 Teil Ich denke –

+0

@AndyJacobs Willst du die Scroll-Ansicht die Pfanne oder nicht erkennen? Sie möchten über Lay hinzufügen, die 2 Finger Pan und Scrollview erkennt, um andere Pfannen richtig zu erkennen? Wenn ich falsch denke, bitte klären Sie es –

Antwort

10

Sie benötigen keine Überlagerungsansicht.
Erster implementieren UIPanGestureRecognizer, die zwei Finger Pfanne behandelt und es zu Ihrer Ansicht zuweisen, die

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] 
               initWithTarget:self 
                 action:@selector(handlePan:)]; 
panGestureRecognizer.delegate = self; 
panGestureRecognizer.minimumNumberOfTouches = 2; 
panGestureRecognizer.maximumNumberOfTouches = 2; 
[self.view addGestureRecognizer:panGestureRecognizer]; 

Verwenden UIScrollView s enthält UIGestureRecognizerDelegate 2-Finger-Pfanne mit UIScrollView pan Geste Sie

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

Und schließlich zu handhaben sind in der Lage, 2 Finger zu handhaben

- (void)handlePan:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    NSLog(@"pan"); 
} 

Wenn Sie UIScrollView, wenn zwei Finger pan Sie deaktivieren und UIScrollView pan-Erkenner ermöglichen kann, wird erkannt stoppen wollen Scrollen

- (void)handlePan:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    if(gestureRecognizer.state == UIGestureRecognizerStateBegan) 
    { 
     _scrollView.panGestureRecognizer.enabled = NO; 
    } 
    if(gestureRecognizer.state == UIGestureRecognizerStateEnded) 
    { 
     _scrollView.panGestureRecognizer.enabled = YES; 
    } 
    NSLog(@"pan"); 
} 
3

Wenn Sie das Overlay nicht wirklich brauchen, können Sie dies mit nur Gestenerkennung lösen. Ich schrieb dies als Test up:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 
    _scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height); 

    UIView *green = [[UIView alloc] initWithFrame:self.view.bounds]; 
    [green setBackgroundColor:[UIColor greenColor]]; 

    UIView *blue = [[UIView alloc] initWithFrame:CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0)]; 
    [blue setBackgroundColor:[UIColor blueColor]]; 

    [_scrollView addSubview:green]; 
    [_scrollView addSubview:blue]; 

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPan:)]; 
    [pan setMinimumNumberOfTouches:2]; 
    [pan setMaximumNumberOfTouches:2]; 
    [pan setDelaysTouchesBegan:YES]; 

    [_scrollView addGestureRecognizer:pan]; 

    [self.view addSubview:_scrollView]; 
} 

- (void)twoFingerPan:(UIPanGestureRecognizer *)gesture { 
    switch (gesture.state) { 
     case UIGestureRecognizerStateBegan: 
      self.scrollView.scrollEnabled = NO; 
      break; 
     case UIGestureRecognizerStateCancelled: 
     case UIGestureRecognizerStateEnded: 
     case UIGestureRecognizerStateFailed: 
      self.scrollView.scrollEnabled = YES; 
      break; 
     default: 
      break; 
    } 
    NSLog(@"2 Fingers!"); 
} 

ich den twoFingerPan: Anruf wieder für, wenn zwei Finger verwendet werden. Die Scroll-Ansicht panGestureRecognizer funktioniert immer noch an diesem Punkt, also deaktiviere ich das Scrollen in der Scroll-Ansicht, um die 2-Finger-Pan zu behandeln. Ich fand diese Methode sehr gut. Eine Art wackeliges Ding ist, wenn die Bildlaufansicht verlangsamt wird, wird der 2-Finger-Gestenerkenner nicht aufgerufen. Ich hoffe, das hilft!

Verwandte Themen