ios ios5 uiscrollview uigesturerecognizer uipangesturerecognizer

ios - Interceptar gestos de desplazamiento sobre un UIScrollView rompe el desplazamiento



ios5 uigesturerecognizer (2)

Tengo un UIScrollView desplazamiento vertical. También quiero manejar pans horizontales, permitiendo el comportamiento de desplazamiento vertical predeterminado. Puse una UIView transparente sobre la vista de desplazamiento, y agregué un reconocedor de movimiento de pan a ella. De esta manera puedo obtener las bandejas bien, pero luego la vista de desplazamiento no recibe ningún gesto.

Implementé los siguientes métodos UIPanGestureRecognizerDelegate , con la esperanza de limitar mi reconocedor de gestos a paneles horizontales solamente, pero eso no me ayudó:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { // Only accept horizontal pans here. // Leave the vertical pans for scrolling the content. CGPoint translation = [gestureRecognizer translationInView:self.view]; BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y)); return isHorizontalPan; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return (otherGestureRecognizer == _scrollView.panGestureRecognizer); }


Tuve el mismo problema para resolver e hice esto:

1) Adjuntar mi propio reconocedor de bandeja a la vista de desplazamiento.

2) Regrese SI en: - gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:

Esto permitirá que ambos gestos funcionen. Entonces, lo que eso significa es que en el desplazamiento vertical, tanto su delegado panGesture como delegado scrollView serán despedidos. Si se trata de un desplazamiento horizontal, solo llamará a su delegado panGesture.

3) en mi delegado panGesture, detectar si se trata de un desplazamiento horizontal, si no lo es, ignorar.


OK, lo descubrí. Necesitaba hacer 2 cosas para que esto funcione:

1) Adjuntar mi propio reconocedor panorámico a la vista de desplazamiento, no a otra vista en la parte superior.

2) Este método UIGestureRecognizerDelegate evita el comportamiento ridículo que ocurre cuando tanto la vista de desplazamiento predeterminada como la mía propia se invocan simultáneamente.

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