Tap con dos dedos: El gesto de Deshacer para apps iOS

El siguiente artículo ha sido publicado originalmente en inglés en el Blog de Xojo, y en este se nos muestra como podemos capturar y añadir una acción al evento de tap con dos dedos en nuestras apps Xojo para iOS. Y ya sabes, siempre de forma nativa, con código compilado. Por tanto, a partir de esta línea, toda la autoría pertenece a Geoff Perlman (CEO de Xojo) y también a Xojo.

Por ahora el único gesto incluido en iOS para la acción deshacer consiste en sacudir el dispositivo. Esto no resulta muy intuitivo para mi y, de hecho, lo he hecho accidentalmente unas cuantas veces. Los creadores de Procreate han elegido un tap con dos dedos para dicha acción, y lo cierto es que sus usuarios se han adaptado bien al mismo. Este gesto está siendo adoptado cada vez por más y más desarrolladores iOS. A continuación encontrarás el código neceario para implementar el tap con dos dedos para la acción de Deshacer en tus apps iOS creadas con Xojo.

Un ejemplo en Xojo

Si no has trabajado con gestos en Xojo previamente, realmente no es algo difícil de llevar a cabo. Para demostrarlo, he creado una app iOS sencilla que dibuja un círculo cada vez que haces tap.

La idea básica es que cada vez que el usuario hace tap con un solo dedo, dicha información (el tap como iOSEventInfo en el siguiente código) se añade a un array denominado TapHistory y se fuerza el redibujado del Canvas. En el evento Paint del Canvas, se recorre el array TapHistory y se dibuja un círculo en cada ubicación:

For Each tap As iOSEventInfo In TapHistory
 Dim d, x, y As Integer
 d = 50 'el diámetro del círculo a dibujar

 'obtén la posición X, Y del tap
 x = tap.PointerPosition(0).X
 y = tap.PointerPosition(0).Y

 'Dibuja el círculo centrado en el tap
 g.FillOval(x - d/2, y - d/2, d, d)
Next

Para crear el array TapHistory de modo que pueda mantener todos los taps, se utiliza el evento PointerDown del Canvas del control, y que se dispara cada vez que se produce un tap. El evento eventInfo tiene un parámetro iOSEventInfo que contiene todo lo que necesitas saber sobre un tap. Además de la ubicación, te indica cuántos dedos se han utilizado. En este evento, el código de ejemplo determina si se han utilizado uno o dos dedos. Si se ha utilizado solo un dedo, entonces se añade eventInfo al array TapHistory de modo que se utilice en el dibujado de círculos. Si se han usado dos dedos, el usuario querrá realizar la operación de deshacer, de modo que se borrará la última entrada de TapHistory.

Select Case eventInfo.PointerCount

 Case 1 'Tap con 1 dedo
 'Añade el tap a la lista de taps
 TapHistory.Append(eventInfo)

 Case 2 'Tap con 2 dedos
 'Elimina el último tap con un dedo
 'siempre que haya círculos para mostrar en pantalla

 If TapHistory.Ubound > -1 Then
  TapHistory.Remove(TapHistory.Ubound)
 End If
End Select

'Redibuja el canvas
Canvas1.Invalidate

En cualquier caso, el Canvas se invalida de modo que se fuerza su redibujado y, por tanto, se recorre el array TapHistory y se redibujan los círculos en sus posiciones originales.

El ejemplo de tap con dos dedos está disponible en este enlace, por si quieres descargarlo y modificarlo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *