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.