Problemen oplossen

Flash Player 10.1 of hoger, Adobe AIR 2 of hoger

Technologieën voor hardware- en softwareondersteuning voor aanraakinvoer veranderen heel snel. Deze naslaggids bevat geen uitgebreide lijst met apparaten, besturingssystemen en softwarecombinaties waarbij multitouch-invoer wordt ondersteund. De gids geeft wel richtlijnen over het gebruik van de API voor detectie, zodat u kunt nagaan of uw toepassing wordt uitgevoerd op een apparaat dat ondersteuning biedt voor multitouch-invoer. Ook vindt u hier tips voor het oplossen van eventuele problemen met uw ActionScript-code.

Flash-runtimes reageren op aanraakgebeurtenissen op basis van de informatie die door het apparaat, het besturingssysteem of de containersoftware (zoals een browser) wordt doorgegeven aan de runtime. Door deze afhankelijkheid van de softwareomgeving wordt het lastig om precies de mate van multitouch-compatibiliteit vast te leggen. Sommige apparaten interpreteren een beweging of aanraakbeweging anders dan andere apparaten. Wordt rotatie gedefinieerd door twee vingers die tegelijkertijd draaien? Of wordt rotatie aangegeven door één vinger die een cirkel tekent? Afhankelijk van de hardware- en softwareomgeving kan de rotatiebeweging bestaan uit beide bewegingen, of uit iets heel anders. Het apparaat geeft de gebruikersinvoer door aan het besturingssysteem, dat deze informatie weer doorgeeft aan de runtime. Als de runtime is opgenomen in een browser, wordt de bewegings- of aanraakgebeurtenis soms geïnterpreteerd door de browsersoftware en niet doorgegeven aan de runtime. Dit gedrag is vergelijkbaar met het gedrag voor sneltoetsen: u probeert met een bepaalde toetsencombinatie een Flash Player-handeling binnen de browser uit te voeren, maar wat gebeurt is dat de browser een bepaald menu blijft openen.

Individuele API's en klassen geven aan als ze niet compatibel zijn met bepaalde besturingssystemen. Meer informatie over individuele API-invoer kunt u hier bekijken, te beginnen met de Multitouch-klasse: http://help.adobe.com/nl_NL/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

Hier volgen de beschrijvingen voor enkele algemene bewegingen en aanrakingen:
Pannen
Een vinger verplaatsen van links naar rechts of omgekeerd. Bij sommige apparaten zijn twee vingers vereist.

Roteren
Het scherm aanraken met twee vingers en deze vervolgens in een cirkel ronddraaien (alsof u met beide vingers een cirkel tekent op het scherm). Het draaipunt is het middelpunt tussen beide vingers.

Zwiepen
Snel drie vingers verplaatsen van links naar rechts (of omgekeerd), of van boven naar beneden (of omgekeerd)

Zoomen
Het scherm aanraken met twee vingers en deze vervolgens uit elkaar verplaatsen om in te zoomen, en naar elkaar toe om uit te zoomen.

Druk- en tikbeweging
Met één vinger aanraken of verplaatsen en vervolgens tikken met een andere vinger.

Elk apparaat heeft eigen documentatie over de bewegingen die worden ondersteund en over hoe u elke beweging op het apparaat moet uitvoeren. Over het algemeen moet de gebruiker alle vingers van het apparaat afhalen tussen twee bewegingen. Dit is mede afhankelijk van het besturingssysteem.

Als uw toepassing niet reageert op aanraak- of bewegingsgebeurtenissen, moet u het volgende controleren:
  1. Hebt u gebeurtenislisteners voor aanraak- of bewegingsgebeurtenissen gekoppeld aan een objectklasse die items overneemt van de InteractiveObject-klasse? Alleen met InteractiveObject-instanties kunt u luisteren naar aanraak- en bewegingsgebeurtenissen

  2. Test u de toepassing binnen Flash Professional CS5? In dat geval moet u de toepassing publiceren en testen, aangezien Flash Professional de interactie kan onderscheppen.

  3. Begin eenvoudig en kijk eerst naar wat wel functioneert (de volgende code komt uit de API-invoer voor 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); 
    }

    Tik op de rechthoek. Als deze voorbeeldcode werkt, weet u zeker dat een enkele tikbeweging wordt ondersteund door de omgeving. Hierna kun u testen op het afhandelen van complexere bewegingen.

    Het testen op bewegingsondersteuning is meer gecompliceerd. Individuele apparaten of besturingssystemen bieden ondersteuning voor geen enkele bewegingsinvoer, of voor willekeurige combinaties van bewegingsinvoer.

    Hier is een eenvoudige test voor de in- en uitzoombeweging:

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

    Voer een zoombeweging uit op het apparaat en controleer of het bericht Zoom is supported (Zoomen wordt ondersteund) wordt weergegeven in het tekstveld. De gebeurtenislistener wordt toegevoegd aan het werkgebied, zodat u de beweging kunt uitvoeren in elk gedeelte van de testtoepassing.

    Hier is een eenvoudige test voor de panbeweging:

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

    Voer een panbeweging uit op het apparaat en controleer of het bericht Pan is supported (Pannen wordt ondersteund) wordt weergegeven in het tekstveld. De gebeurtenislistener wordt toegevoegd aan het werkgebied, zodat u de beweging kunt uitvoeren in elk gedeelte van de testtoepassing.

    Bij sommige combinaties van besturingssysteem en apparaat worden beide bewegingen ondersteund en bij andere combinaties geen van beide. Test de uitvoeringsomgeving van uw toepassing om zeker te zijn.

Bekende problemen

Hier volgt een lijst met bekende problemen gerelateerd aan aanraakinvoer:
  1. Als u Mobile Internet Explorer uitvoert op het Windows Mobile-besturingssysteem wordt automatisch ingezoomd op de inhoud van een SWF-bestand:

    Dit zoomgedrag in Internet Explorer wordt overschreven als u de volgende code toevoegt aan de HTML-pagina die als host dient voor het SWF-bestand:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. Bij Windows 7 (en mogelijk ook bij andere besturingssystemen) moet de gebruiker het aanwijsapparaat (of de vingers) van het scherm optillen tussen twee afzonderlijke bewegingen. Als u een afbeelding wilt draaien en deze vervolgens wilt inzoomen, gaat u als volgt te werk:
    • Voer de draaibeweging uit.

    • Haal uw vingers van het scherm.

    • Plaats uw vingers weer op het scherm en voer de inzoombeweging uit.

  3. Bij Windows 7 (en mogelijk ook bij andere besturingssystemen) worden de rotatie- en zoombewegingen niet altijd gevolgd door een updatefase als de gebruiker de beweging zeer snel uitvoert.

  4. Multitouch wordt niet ondersteund op Windows 7 Starter Edition. Zie het AIR Labs Forum voor details: http://forums.adobe.com/thread/579180?tstart=0

  5. Bij Mac OS 10.5.3 en hoger is de Multitouch.supportsGestureEvents -waarde altijd true , ook als de bewegingsgebeurtenissen niet worden ondersteund door de hardware.