Solução de problemas

Flash Player 10.1 e posterior, Adobe AIR 2 e posterior

O suporte de hardware e software para entrada de toque está mudando rapidamente. Esta referência não mantém uma lista de cada dispositivo que uma combinação de sistema operacional e software pode oferecer suporte a multitoque. No entanto, ela fornece orientações para utilizar a API de descoberta para determinar se o aplicativo está implementado em um dispositivo que suporte multitoque e fornece dicas para resolução de problemas no código ActionScript.

Os tempos de execução do Flash respondem a eventos de toque com base nas informações que o dispositivo, sistema operacional ou software (como, por exemplo, o navegador) passam para o tempo de execução. Esta dependência do ambiente de software complica a documentação da compatibilidade multitoque. Alguns dispositivos interpretam um gesto ou um toque de forma diferente de outro dispositivo. A rotação é definida por dois dedos girando ao mesmo tempo? A rotação de um dedo é o mesmo que desenhar um círculo na tela? Dependendo do hardware e do ambiente de software, o gesto de rotação pode ser ambos, ou algo completamente diferente. Dessa forma, o dispositivo comunica ao sistema operacional a entrada do usuário e, em seguida, o sistema operacional transmite essas informações para o tempo de execução. Se o tempo de execução estiver contido em um navegador, o software do navegador interpreta o gesto ou evento de toque e não transmite a entrada para o tempo de execução. Este comportamento é similar ao comportamento das "teclas de atalho": você tenta utilizar uma combinação específica de teclas para que o Flash execute algo dentro do navegador e, em vez disso, o navegador abre um menu.

API e classes individuais indicam se elas não compatíveis com sistemas operacionais específicos. É possível explorar entradas de API individuais aqui, começando pela classe Multitoque: http://help.adobe.com/pt_BR/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

A seguir, algumas descrições de gestos e toque comuns:
Deslocar
Mover um dedo da esquerda para a direita ou da direita para a esquerda. Alguns dispositivos requerem dois dedos para deslocar.

Girar
Tocar com dois dedos e, em seguida, movê-los ao redor em um círculo (como se ambos estivessem traçando um círculo imaginário em uma superfície). O ponto pivô é definido como ponto intermediário entre os pontos de toque dos dois dedos.

Deslizar
Mover três dedos da esquerda para a direita ou direita para a esquerda, de cima para baixo ou de baixo para cima rapidamente.

Ampliar
Tocar com dois dedos e distanciá-los para ampliar e aproximá-los para reduzir.

Pressionar e tocar
Mover ou pressionar um dedo e, em seguida, tocar a superfície com outro dedo.

Cada dispositivo possui sua própria documentação sobre os gestos que o dispositivo suporta e como executar cada gesto no dispositivo. Geralmente, o usuário deve remover todos os dedos do dispositivo entre gestos, dependendo do sistema operacional.

Se você perceber que seu aplicativo não está respondendo a eventos de toque ou gestos, execute os testes a seguir:
  1. Existem ouvintes de evento para eventos de gesto ou toque anexados à uma classe de objeto que herda atributos da classe InteractiveObject? Somente instâncias InteractiveObjects pode monitorar eventos de gestos ou toques

  2. O aplicativo está sendo testado com o Flash Professional CS5? Em caso afirmativo, tente publicar e testar o aplicativo, porque o Flash Professional pode interceptar as interações.

  3. Começe de forma simplificada e verifique o que funciona (o código de exemplo a seguir é da entrada de API para 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 no retângulo. Se este exemplo funcionar, você saberá que o ambiente tem suporte a toque simples, Dessa forma, você poderá testar manipulações maiis complexas.

    O teste para suporte de gestos é mais complicado. Um dispositivo individual ou sistema operacional possuem suporte a uma combinação de entrada de gestos ou nenhuma combinação.

    A seguir, um teste simples para o 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"; 
    }

    Execute um teste de gesto no dispositivo e verifique se o campo de texto é populado com a mensagem Zoom is supported . O ouvinte de evento é adicionado ao palco, de forma que você possa executar o gesto em qualquer parte do aplicativo.

    A seguir, um teste simples para o gesto de panorâmico:

    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"; 
    }

    Execute um teste de gesto panorâmico no dispositivo e verifique se o campo de texto é populado com a mensagem Pan is supported . O ouvinte de evento é adicionado ao palco, de forma que você possa executar o gesto em qualquer parte do aplicativo.

    Alguns sistemas operacionais e combinações de dispositivos possuem suporte a ambos gêneros, outros possuem suporte a somente um gênero e outros a nenhum. Teste o ambiente de desenvolvimento de seu aplicativo para certificar-se.

Problemas conhecidos

Os itens a seguir são problemas conhecidos relacionados à entrada de toque:
  1. Mobile Internet Explorer no sistema operacional Windows Mobile faz o zoom automático de conteúdo de arquivo SWF:

    Este comportamento do zoom do Internet Explorer pode ser sobrescrito, adicionando o código a seguir à página HTML do arquivo SWF:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. No Windows 7 (e possivelmente, em outros sistemas operacionais), o usuário deve levantar o dispositivo apontador (ou os dedos) da tela entre gestos. Por exemplo, para girar e ampliar uma imagem:
    • Execute o gesto de girar.

    • Levante o dedo da tela.

    • Posicione os dedos de volta à tela e execute o gesto de ampliação.

  3. No Windows 7 (e possivelmente, outros sistemas operacionais), os gestos de girar e ampliar nem sempre geram uma fase de atualização se o usuário executar o gesto de forma muito rápida.

  4. O Windows 7 Starter Edition não possui suporte a multitoque. Consulte o fórum do AIR Labs para obter mais detalhes: http://forums.adobe.com/thread/579180?tstart=0

  5. Para o Mac OS 10.5.3 e superior, o valores Multitouch.supportsGestureEvents é sempre true , mesmo que o hardware não possua suporte a eventos de gestos.