sirven - iPhone: Cómo combinar Long Presionar el gesto y arrastrar la operación juntos en el mapa?



para que sirven los gestos en el iphone (1)

He intentado varias cosas y publicar el código en este momento probablemente sea confuso, así que déjame comenzar con el concepto.

De alguna manera, necesito combinar las operaciones de pulsación larga y arrastre táctil en una sola operación, algo así como LongPressThenDragGestureRecognizer. Estoy tratando de lograr esto en un MKMapView, por lo que no puedo desactivar la interacción del usuario todo el tiempo, porque quiero la funcionalidad de panorámica y zoom del mapa.

Para complicar un poco las cosas, el ítem inicial (un objeto MKOverlay) que el usuario presiona largamente para reconocer la interacción tendrá que ser eliminado y reemplazado con un nuevo objeto dibujado. En ese punto, el código ya no se preocupa por el objeto, solo donde está el dedo en un punto determinado (voy a volver a dibujar el objeto arrastrado a medida que se mueven).

Este es el flujo de trabajo:

  1. Al usuario se le presenta una superposición en el mapa
  2. El usuario toca y retiene el elemento para que la aplicación sepa que quiere arrastrarlo
  3. La aplicación reemplaza la superposición con un objeto dibujado y deshabilita el mapa para que no comience a panoramizar (en lugar de arrastrar).
  4. El usuario arrastra el dedo y el objeto se vuelve a dibujar a medida que se mueve.
  5. El usuario levanta el dedo para completar el arrastre
  6. La aplicación reemplaza el objeto dibujado con una nueva superposición de mapa
  7. La aplicación permite la interacción del usuario en el mapa para permitir la selección de panorámica / zoom / anotación, etc.

He intentado varias cosas hasta ahora, con poco éxito. Los mejores resultados que tengo hasta ahora se enumeran a continuación. Esto se hizo usando un UILongPressGestureRecognizer en los objetos MKMapView (verificando la intersección con la superposición), y luego reemplazando toques Comenzó por la función de arrastrar y tocar del mapa.

  • Se muestra la superposición y el usuario realiza con éxito un gesto de pulsación larga que se reconoce de forma adecuada
  • La interacción del usuario del mapa está desactivada y la superposición se reemplaza por un objeto dibujado
  • El usuario debe levantar el dedo y tocar nuevamente para iniciar la operación de arrastre
  • Cuando el usuario levanta el dedo, se dibuja una nueva superposición y se vuelve a habilitar la interacción del mapa

Estoy tan cerca, que simplemente no sé cómo combinar los gestos en uno solo, de modo que el usuario no tenga que levantar el dedo y tocarlo nuevamente para iniciar el arrastre.

Cualquier idea es muy apreciada.


Si se trata de un gesto complejo como este, me sentiría tentado a evitar por completo un reconocedor de gestos y pasar a tocar Bean, toquesMoved, tocadoEndecido, toques cancelados con un cierto estado en el que avanzas mientras el gesto indica dónde estás.

MKMapView tiene una clase base UIResponder, por lo que debería ser fácil crear su propia versión derivada de MKMapView que responda a los eventos táctiles (recuerde pasarlos al super el mapa para mantener su funcionalidad normal).