ios mover evento táctil entre dos uiscrollview

Estoy creando un diseño de iOS que consta de un UITableView y UIScrollView. UIScrollView está dentro de una celda de tabla del UITableView y se puede desplazar tanto horizontal como verticalmente. El siguiente diagrama muestra esta situación. Si el usuario comienza a desplazarse hacia abajo/arriba en la UIScrollView el evento de desplazamiento debería desencadenar setContentOffset de la vista de tabla, y no setContentOffset para la vista de desplazamiento, mientras que la parte superior de la vista de desplazamiento estará en la línea de puntos (su altura constante). Luego, un evento táctil de desplazamiento debería activarse setContentOffset para la vista de desplazamiento, no para la vista de tabla.

En otro caso: cuando el usuario comienza a desplazarse en la vista de la tabla, debería desencadenar setContentOffset para la vista de tabla, hasta que la vista de desplazamiento llegue a la línea de puntos. Entonces la vista de desplazamiento debe manejar setContentOffset.

Mi problema es cómo transferir eventos táctiles entre la vista de tabla y la vista de desplazamiento durante una acción de deslizamiento.

enter image description here

preguntado el 10 de septiembre de 13 a las 01:09

2 Respuestas

Esto suena como uno de esos casos en los que quieres algo bastante específico y personalizado. Así que tratar de hacer algo inteligente con los reconocedores de gestos no será suficiente.

El principal problema es que las formas en que puede controlar los reconocedores de gestos, como con gestureRecognizer:shouldReceiveTouch: y gestureRecognizerShouldBegin: solo afecta el inicio del gesto (o para nuevos toques, no los continuos), pero desea que un solo gesto continuo haga la transición entre controlar cada vista. Entonces, por esta razón, creo que necesitará colocar una vista transparente grande en toda su pantalla con un reconocedor de gestos panorámicos y en su método handlePan decidir qué vista desea ajustar y luego llamar setContentOffset directamente en esa vista. Puede utilizar la traducción del reconocedor de pan y el desplazamiento de contenido existente para calcular el nuevo. Sé que esto no es muy elegante, pero no se me ocurre otra forma de lograr el efecto que deseas.

Respondido el 10 de Septiembre de 13 a las 02:09

No estoy seguro de si esto va a funcionar, pero podría intentar hacer algo como esto:

  1. Optión

    self.scrollView.panGestureRecognizer = self.tableView.panGestureRecognizer;

  2. Optión

    [self.scrollView addGestureRecognizer:self.tableView.panGestureRecognizer];

  3. Optión

    [self.tableView.panGestureRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer];
    

Respondido el 10 de Septiembre de 13 a las 21:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.