Risoluzione dei problemi

Flash Player 10.1 e versioni successive, Adobe AIR 2 e versioni successive

Il supporto hardware e software per l'input tocco cambia rapidamente. Questa guida non mantiene un elenco di tutte le combinazioni di dispositivo e sistema operativo che supportano il multitocco. Tuttavia, fornisce le istruzioni di utilizzo dell'API di rilevamento per determinare se l'applicazione è distribuita su un dispositivo che supporta il multitocco e fornisce suggerimenti per la risoluzione dei problemi del codice ActionScript.

I runtime Flash rispondono agli eventi di tocco in base alle informazioni che il dispositivo, il sistema operativo o il software che le contiene (ad esempio, un browser) passa al runtime. Questa dipendenza dall'ambiente software rende più difficile documentare la compatibilità multitocco. Alcuni dispositivi interpretano una manovra o movimento tocco in maniera diversa da un altro dispositivo. La rotazione è definita da due dita che ruotano contemporaneamente? La rotazione è un dito che disegna un cerchio sullo schermo? In base all'ambiente hardware e software, la manovra di rotazione può essere una delle due o qualcosa di completamente diverso. Pertanto, il dispositivo segnala al sistema operativo l'input dell'utente, quindi il sistema operativo passa questa informazione al runtime. Se il runtime è eseguito all'interno di un browser, il software del browser interpreta a volte la manovra o evento di tocco e non passa l'input al runtime. Questo comportamento è simile a quello dei “tasti di scelta”: si cerca di utilizzare una combinazione di tasti specifica per fare in modo che Flash Player esegua un'operazione all'interno del browser mentre il browser continua ad aprire un menu.

API e classi singole segnalano l'assenza di compatibilità con sistemi operativi specifici. Potete esplorare voci API singole qui, partendo dalla classe Multitouch: http://help.adobe.com/it_IT/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

Di seguito sono riportate alcune descrizioni di tocco o manovre comuni:
Scorrere
Muovere un dito da sinistra a destra o da destra a sinistra. Alcuni dispositivi richiedono due dita per eseguire lo scorrimento.

Ruota
Toccare con due dita, quindi muoverle a cerchio (come se entrambe traccino simultaneamente un cerchio immaginario su una superficie). Il punto di perno si trova nel punto di mezzo tra i punti di contatto delle due dita.

Strisciare
Spostare tre dita da sinistra a destra o da destra a sinistra, dall'alto verso il basso o dal basso verso l'alto.

Zoom
Toccare con due dita, quindi allontanarle per eseguire lo zoom avanti o avvicinarle per eseguire lo zoom indietro.

Premi e tocca
Spostare o premere un solo dito, quindi toccare la superficie con un altro.

Ogni dispositivo viene fornito con la documentazione relativa alle manovre supportate e al modo in cui eseguirle. In generale, l'utente deve sollevare tutte le dita dallo schermo del dispositivo tra le manovre, a seconda del sistema operativo.

Se l'applicazione non risponde agli eventi di tocco o alle manovre, verificate quanto segue:
  1. Disponete di listener di eventi per eventi di tocco o manovra allegati a una classe oggetto che eredita dalla classe InteractiveObject? Solo istanze InteractiveObject possono intercettare eventi di tocco e manovra.

  2. State provando l'applicazione all'interno di Flash Professional CS5? In tal caso, provate a pubblicare e verificare l'applicazione, poiché Flash Professional può intercettare l'interazione.

  3. Iniziate in modo semplice e controllate innanzitutto cosa funziona (l'esempio di codice seguente deriva dalla voce API per 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); 
    }

    Toccate il rettangolo. Se questo esempio funziona, sapete che il vostro ambiente supporta un tocco semplice. Potete quindi provare gestioni più complicate.

    Il test del supporto manovra è più complicato. Un dispositivo o sistema operativo singolo supporta qualsiasi combinazione di input gestuale, o nessuno.

    Di seguito è riportato un semplice test per la manovra di 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"; 
    }

    Eseguite una manovra di zoom sul dispositivo e verificate se il campo di testo viene compilato con il messaggio Zoom is supported (Zoom non supportato). Il listener di eventi viene aggiunto allo stage per consentire di eseguire la manovra su qualsiasi parte dell'applicazione di prova.

    Di seguito è riportato un semplice test per la manovra di scorrimento:

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

    Eseguite una manovra di scorrimento sul dispositivo e verificate se il campo di testo viene compilato con il messaggio Pan is supported (Scorrimento supportato). Il listener di eventi viene aggiunto allo stage per consentire di eseguire la manovra su qualsiasi parte dell'applicazione di prova.

    Alcune combinazioni di sistema operativo e dispositivo supportano entrambe le manovre, alcune ne supportano solo una, altre nessuna. Eseguite il test dell'ambiente di distribuzione dell'applicazione per essere sicuri.

Problemi noti

Di seguito sono riportati problemi noti correlati a l'input tocco:
  1. Mobile Internet Explorer sul sistema operativo Windows Mobile esegue automaticamente lo zoom del contenuto del file SWF:

    Questo comportamento viene ignorato aggiungendo il codice sottostante alla pagina HTML che ospita il file SWF:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. In Windows 7 (e forse altri sistemi operativi) l'utente deve sollevare il dispositivo di puntamento (o le dita) dallo schermo tra le singole manovre. Ad esempio, per ruotare ed eseguire lo zoom di un'immagine:
    • Eseguite la manovra di rotazione.

    • Sollevate le dita dallo schermo.

    • Rimettete le dita sullo schermo ed eseguite la manovra di zoom.

  3. Windows 7 (e forse altri sistemi operativi), le manovre di rotazione e zoom non sempre generano una fase di “aggiornamento” se l'utente esegue la manovra molto rapidamente.

  4. Windows 7 Starter Edition non supporta il multitocco. Per ulteriori informazioni vedete AIR Labs Forum all'indirizzo http://forums.adobe.com/thread/579180?tstart=0

  5. Per Mac OS 10.5.3 e versioni successive, il valore Multitouch.supportsGestureEvents è sempre true anche se l'hardware non supporta eventi manovra.