UIScrollView anula los reconocedores de gestos de pan de mi subvista

Si tengo un scrollView con una subvista y la subvista tiene un reconocedor de gestos, el desplazamiento del desplazamiento de scrollView es la panoramización de la subvista. Lo que quiero es lo opuesto, creo, para que arrastre una subvista que se desplazará dentro de la vista de desplazamiento, sin embargo, si toco otra área, la vista de desplazamiento se desplazará normalmente. ¿Hay una forma fácil de configurarlo?

Esto es lo que funciona para mí:

UIPanGestureRecognizer *subviewPanRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panSubview:)]; [subview addGestureRecognizer:subviewPanRecognizer]; // play nice with subview's pan gesture [scrollView.panGestureRecognizer requireGestureRecognizerToFail:subviewPanRecognizer]; 

Sobrescribe estos dos delegates a continuación,

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

}

Esto le permitirá reconocer ambos gestos, el retorno pnetworkingeterminado es NO, por lo que debemos sobrescribirlo y devolver .

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

}

En este delegado, puede hacer cualquier cosa como desee, ya que es el nombre que gestionRecoginzer deberá fallar con el otroGestureRecognizer , todo lo que necesita hacer es juzgar qué tipo de estos dos gestos y devolver SÍ o NO.