2013-09-23 8 views
5

Se si dispone di una scrollView con una sottoview e la sottoview ha un riconoscitore di pan control, il pan di scrollView sostituisce il pan della subview. Quello che voglio è il contrario, penso, così che trascino una sottoview che scorrerà nella vista di scorrimento, eppure se tocco un'altra area, la vista di scorrimento scorrerà normalmente. C'è un modo semplice per configurarlo?UIScrollView esegue l'override dei riconoscitori di panoramica pan della mia subview

risposta

12

Ecco ciò che funziona per me:

UIPanGestureRecognizer *subviewPanRecognizer = [[UIPanGestureRecognizer alloc] 
    initWithTarget:self action:@selector(panSubview:)]; 
[subview addGestureRecognizer:subviewPanRecognizer]; 

// play nice with subview's pan gesture 
[scrollView.panGestureRecognizer 
    requireGestureRecognizerToFail:subviewPanRecognizer]; 
+0

Questo sembra essere il comportamento predefinito (è ciò che sto osservando in pratica in un UIScrollView con una sottoview UIImageView). Qualcuno potrebbe confermare/infermare? – Norswap

+1

non funziona per me –

+0

Funziona magnificamente, specialmente quando si applica un delegato nella sottoview e si implementa 'gestureRecognizerShouldBegin:'. –

0

rimpiazzare queste due delegato di seguito,

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

}

Questo vi permetterà di riconoscere entrambi i gesti, il ritorno di default è NO, quindi dobbiamo sovrascriverlo e restituire SI.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
    if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     return NO; 
    }else{ 
     return YES; 
    } 
} 
return YES; 

}

In questo delegato si può fare nulla, come si desidera, come il suo nome l'gestureRecoginzer sarà richiesto a fallire dal otherGestureRecognizer, tutto quello che dovete fare è quello di giudicare ciò che tipo di questi due gesti e restituire SÌ o NO.