Solución de problemas

Flash Player 10.1 y posterior, Adobe AIR 2 y posterior

La compatibilidad de hardware y software con entradas táctiles cambia a pasos agigantados. Esta referencia no contiene una lista de todas las combinaciones de dispositivos y sistemas operativos que admiten tecnología multitáctil. Ofrece, no obstante, información sobre el uso de la API de detección para determinar si su aplicación se ha desarrollado en un dispositivo compatible con tecnología multitáctil y proporciona sugerencias para solucionar posibles problemas en el código ActionScript.

Los motores de ejecución de Flash responden a eventos táctiles según la información que el dispositivo, sistema operativo o software (por ejemplo, un navegador) transfiere al motor de ejecución. Esta dependencia del entorno de software complica la documentación de la compatibilidad con la tecnología multitáctil. Algunos dispositivos interpretan un gesto o movimiento táctil de modo distinto. ¿El giro se define con dos dedos girando al mismo tiempo? ¿El giro se define con un solo dedo dibujando un círculo en la pantalla? En función del entorno de hardware y software, el gesto de giro podría ser incluso un gesto totalmente distinto. Así, es el dispositivo quien informa al sistema operativo de la entrada del usuario. Posteriormente, el sistema operativo transfiere esta información al motor de ejecución. Si el motor de ejecución está en un navegador, el software del navegador a veces interpreta el gesto o evento táctil y no necesita transferir la entrada al motor de ejecución. Este comportamiento es similar al de las “teclas de función”: puede insertar una combinación de teclas específica para Flash Player haga algo dentro del navegador y este mantiene un menú abierto.

Las API individuales y las clases mencionan si no son compatibles con determinados sistemas operativos. Puede analizar las distintas entradas de las API aquí, comenzando por la clase Multitouch: http://help.adobe.com/es_ES/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

A continuación encontrará descripciones sobre gestos y toques habituales:
Desplazamiento
Mueva un dedo de izquierda a derecha o de derecha a izquierda. Algunos dispositivos requieren el uso de dos dedos para este gesto.

Girar
Toque con dos dedos y muévalos en círculo (como si trazase un círculo imaginario en una superficie con dos dedos). El punto de giro se establece en el punto medio entre los dos puntos de contacto de los dedos.

Barrido
Mueva rápidamente tres dedos de izquierda a derecha, de derecha a izquierda, de arriba abajo o de abajo arriba.

Zoom
Toque con dos dedos y muévalos separándolos entre sí para ampliar y acercándolos para reducir el zoom.

Pulsar y tocar
Mueva o pulse con un dedo y toque la superficie con otro.

Cada dispositivo tiene su propia documentación para explicar los gestos admitidos y cómo realizarlos en el dispositivo. En general, el usuario debe levantar todos los dedos del dispositivo entre los distintos gestos, aunque esto depende del sistema operativo.

Si su aplicación no responde a eventos o gestos táctiles, pruebe lo siguiente:
  1. ¿Dispone de detectores de eventos para eventos táctiles o de gestos asociados a una clase de objeto que herede de la clase InteractiveObject? Solo las instancias de InteractiveObject pueden detectar eventos táctiles y de gestos

  2. ¿Está probando la aplicación en Flash Professional CS5? Si es así, intente publicar y probar la aplicación, ya que Flash Professional puede interceptar la interacción.

  3. Empiece con gestos sencillos y observe qué sucede (el siguiente ejemplo de código está tomado de la entrada API de Multitouch.inputMode ):

    Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 
    var mySprite:Sprite = new Sprite(); 
    var myTextField:TextField = new TextField() 
     
    mySprite.graphics.beginFill(0x336699); 
    mySprite.graphics.drawRect(0,0,40,40); 
    addChild(mySprite); 
     
    mySprite.addEventListener(TouchEvent.TOUCH_TAP, taplistener); 
     
    function taplistener(e:TouchEvent): void { 
        myTextField.text = "I've been tapped"; 
        myTextField.y = 50; 
        addChild(myTextField); 
    }

    Toque el rectángulo. Si este ejemplo funciona, sabrá que su entorno admite un toque simple. Puede continuar con gestiones más complicadas.

    Probar la compatibilidad de gestos es más complicado. Un dispositivo o sistema operativo individual puede admitir todas las combinaciones de gestos o ninguna.

    A continuación incluimos una sencilla prueba del gesto de zoom:

    Multitouch.inputMode = MultitouchInputMode.GESTURE; 
     
    stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
    var myTextField = new TextField(); 
    myTextField.y = 200; 
    myTextField.text = "Perform a zoom gesture"; 
    addChild(myTextField); 
     
    function onZoom(evt:TransformGestureEvent):void { 
        myTextField.text = "Zoom is supported"; 
    }

    Realice un gesto de zoom en el dispositivo y vea si en el campo de texto aparece el mensaje Zoom is supported (Se admite zoom). El detector de eventos se añade al escenario para que pueda realizar el gesto en cualquier parte de la aplicación de prueba.

    A continuación incluimos una sencilla prueba del gesto de barrido:

    Multitouch.inputMode = MultitouchInputMode.GESTURE; 
     
    stage.addEventListener(TransformGestureEvent.GESTURE_PAN , onPan); 
    var myTextField = new TextField(); 
    myTextField.y = 200; 
    myTextField.text = "Perform a pan gesture"; 
    addChild(myTextField); 
     
    function onPan(evt:TransformGestureEvent):void { 
        myTextField.text = "Pan is supported"; 
    }

    Realice un gesto de barrido en el dispositivo y vea si en el campo de texto aparece el mensaje Pan is supported (Se admite barrido). El detector de eventos se añade al escenario para que pueda realizar el gesto en cualquier parte de la aplicación de prueba.

    Ciertas combinaciones de sistemas operativos y dispositivos pueden admitir ambos gestos, otras admitir solo uno y otras ninguno. Pruebe su entorno de desarrllo de aplicación para asegurarse.

Problemas conocidos

A continuación se detallan problemas conocidos con la entrada táctil:
  1. Mobile Internet Explorer en el sistema operativo Windows Mobile aplica el zoom automáticamente al contenido de archivos SWF:

    Este comportamiento de zoom de Internet Explorer se puede anular añadiendo lo siguiente a la página HTML que contiene el archivo SWF:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. En Windows 7 (y posiblemente otros sistemas operativos), el usuario debe levantar el dispositivo señalador (o el dedo) de la pantalla entre los distintos gestos. Por ejemplo, para girar y ampliar una imagen:
    • Primero se realiza el gesto de giro.

    • Luego se levantan los dedos de la pantalla.

    • Y luego se han de volver a colocar los dedos sobre la pantalla para realizar el gesto de zoom.

  3. Windows 7 (y posiblemente en otros sistemas operativos), los gestos de giro y zoom no siempre generan una fase “update” si el usuario lleva a cabo el gesto demasiado deprisa.

  4. Windows 7 Starter Edition no admite la tecnología multitáctil. Consulte el foro de AIR Labs para saber más: http://forums.adobe.com/thread/579180?tstart=0

  5. En Mac OS 10.5.3 y versiones posteriores, el valor Multitouch.supportsGestureEvents siempre es true , incluso si el hardware no admite eventos de gestos.