Rozwiązywanie problemów

Flash Player 10.1 i nowsze wersje, Adobe AIR 2 i nowsze wersje

Dostępność sprzętowej i programowej obsługi interfejsów dotykowych szybko się zmienia. Nie było możliwe zamieszczenie w niniejszym skorowidzu wykazu wszystkich urządzeń oraz kombinacji systemów operacyjnych i programów obsługujących interakcje Multi-Touch. Zamieszczono tutaj jednak wskazówki dotyczące wykorzystania mechanizmów wykrywania obsługi interakcji Multi-Touch w celu określenia, czy aplikacja jest wdrożona na urządzeniu, które obsługuje takie interakcje. Ponadto przedstawiono wskazówki ułatwiające rozwiązywanie problemów z kodem ActionScript.

Środowiska wykonawcze Flash reagują na zdarzenia dotyku na podstawie informacji odebranych z urządzenia, systemu operacyjnego lub programu będącego kontenerem dla środowiska (np. przeglądarki). Ta zależność od środowiska programowego utrudnia wyczerpujące udokumentowanie zgodności z interfejsami Multi-Touch. Niektóre urządzenia inaczej niż inne interpretują gesty lub ruch przyrządu na ekranie dotykowym. Czy obrót zdefiniowany jest jako jednoczesny ruch obrotowy dwóch palców? Czy też może obrót zdefiniowany jest jako zakreślenie okręgu jednym palcem? W zależności od środowiska sprzętowego i programowego gest obrotu może być zdefiniowany na jeden z powyższych sposobów lub jeszcze inaczej. Urządzenie przekazuje do systemu operacyjnego informację o interakcji z użytkownikiem, a system operacyjny przekazuje tę informację do środowiska wykonawczego. Jeśli środowisko wykonawcze działa wewnątrz przeglądarki, wówczas zdarza się, że sama przeglądarka interpretuje zdarzenie gestu lub dotyku i nie przekazuje informacji o nim do środowiska wykonawczego. Zachowanie to można porównać do obsługi skrótów klawiszowych: czasem użytkownik próbuje użyć konkretnej kombinacji klawiszy, aby wywołać określoną czynność w programie Flash Player, jednak nie odnosi to skutku, ponieważ w odpowiedzi na tę kombinację klawiszy przeglądarka otwiera menu.

W opisach poszczególnych elementów interfejsu API i klas wskazano na ich ewentualne niezgodności z konkretnymi systemami operacyjnymi. Opisy poszczególnych elementów interfejsu API można znaleźć w skorowidzu, począwszy od klasy Multitouch: http://help.adobe.com/pl_PL/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

Poniżej opisano kilka typowych gestów i interakcji dotykowych:
Panoramowanie
Przesunięcie palca z lewej strony na prawą lub z prawej na lewą. Na niektórych urządzeniach do panoramowania należy używać dwóch palców.

Obrót
Dotknięcie urządzenia dwoma palcami, a następnie wykonanie nimi ruchu kolistego (po wyobrażonym okręgu na powierzchni). Środek okręgu znajduje się w połowie odległości między dwoma punktami kontaktu.

Machnięcie
Szybkie przesunięcie trzech palców z lewej strony na prawą, z prawej na lewą, z góry na dół lub z dołu do góry.

Powiększenie
Dotknięcie urządzenia dwoma palcami, a następnie odsunięcie ich od siebie w celu powiększenia lub zsunięcie do siebie w celu pomniejszenia.

Naciśnięcie i stuknięcie
Dotknięcie urządzenia jednym palcem lub przesunięcie jednego palca po urządzeniu, a następnie stuknięcie drugim.

Każde urządzenie jest wyposażone w odrębną dokumentację obsługiwanych gestów oraz sposobu wykonywania tych gestów. W większości systemów operacyjnych użytkownik musi oderwać wszystkie palce od powierzchni urządzenia między kolejnymi gestami.

Jeśli aplikacja nie reaguje na zdarzenia dotyku i gesty, należy sprawdzić, co następuje:
  1. Czy detektory zdarzeń dotyku lub gestów są przyłączone do klasy obiektów, która dziedziczy z klasy InteractiveObject? Tylko instancje klasy InteractiveObject mogą wykrywać zdarzenia dotyku i gestów.

  2. Czy aplikacja jest testowana wewnątrz programu Flash Professional CS5? Jeśli tak, należy spróbować opublikować i przetestować aplikację w środowisku docelowym, ponieważ program Flash Professional może przechwytywać interakcje.

  3. Należy zacząć od prostego kodu i sprawdzić, jakie elementy interakcji działają (poniższy przykład kodu pochodzi z opisu właściwości 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); 
    }

    Stuknij prostokąt. Jeśli ten przykład działa, wiadomo, że środowisko obsługuje proste stuknięcie. Można zatem wypróbować obsługę bardziej skomplikowanych interakcji.

    Sprawdzanie, w jakim zakresie obsługiwane są gesty, jest bardziej skomplikowane. Poszczególne urządzenia i systemy operacyjne obsługują różne kombinacje gestów lub nie obsługują ich wcale.

    Oto przykładowy test sprawdzający, czy obsługiwany jest gest powiększania:

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

    Należy wykonać gest powiększania na urządzeniu i sprawdzić, czy w polu tekstowym pojawi się komunikat Zoom is supported (Powiększanie jest obsługiwane). Detektor zdarzeń jest dodawany do stołu montażowego, a zatem gest zostanie rozpoznany w dowolnym miejscu aplikacji testowej.

    Oto prosty test sprawdzający, czy obsługiwany jest gest panoramowania:

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

    Należy wykonać gest panoramowania na urządzeniu i sprawdzić, czy w polu tekstowym pojawi się komunikat Pan is supported (Panoramowanie jest obsługiwane). Detektor zdarzeń jest dodawany do stołu montażowego, a zatem gest zostanie rozpoznany w dowolnym miejscu interfejsu aplikacji.

    W niektórych kombinacjach systemów operacyjnych i urządzeń obsługiwane są oba gesty, w niektórych tylko jeden, a w jeszcze innych — żaden z gestów. Dla pewności należy przetestować aplikację w docelowym środowisku wdrożenia.

Znane problemy

Poniżej opisano znane problemy związane z interfejsem dotykowym:
  1. Program Mobile Internet Explorer w systemie operacyjnym Windows Mobile automatycznie powiększa treść pliku SWF:

    Temu zachowaniu programu Internet Explorer można zapobiec, dodając następujący kod do strony HTML zawierającej plik SWF:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. W systemie Windows 7 (i potencjalnie także innych systemach operacyjnych) użytkownik musi odrywać urządzenie wskazujące (lub palce) od ekranu między gestami. Na przykład, aby obrócić i powiększyć obraz:
    • Wykonaj gest obrotu.

    • Oderwij palce od ekranu.

    • Ponownie przyłóż palce do ekranu i wykonaj gest powiększania.

  3. W systemie Windows 7 (a możliwe, że także w innych systemach operacyjnych) gesty obrotu i powiększania nie zawsze generują fazę „aktualizacji”, jeśli użytkownik wykonuje gest bardzo szybko.

  4. System Windows 7 Starter Edition nie obsługuje interakcji Multi-Touch. Szczegółowe informacje zawiera forum AIR Labs: http://forums.adobe.com/thread/579180?tstart=0

  5. W systemie Mac OS 10.5.3 i nowszych wersjach właściwość Multitouch.supportsGestureEvents ma zawsze wartość true , nawet jeśli sprzęt nie obsługuje zdarzeń gestów.