Устранение неполадок

Flash Player 10.1 и более поздних версий, Adobe AIR 2 и более поздних версий

Сведения об аппаратной и программной поддержке сенсорного ввода быстро изменяются. В этом справочном описании не содержится список всех комбинаций устройств, операционных систем и программного обеспечения, в которых поддерживается технология Multitouch. Однако в нем приводятся рекомендации по использованию API-интерфейса обнаружения для определения, развернуто ли приложение в устройстве, поддерживающем технологию Multitouch, и советы по устранению ошибок в коде ActionScript.

Среды выполнения Flash реагируют на события прикосновения на основе информации, которую устройство, операционная система или приложение-контейнер (например, браузер) передает в среду выполнения. Эта зависимость от программной среды усложняет создание документации по совместимости Multitouch. В разных устройствах интерпретация жеста или прикосновения может отличаться. Задан ли поворот как одновременный поворот двумя пальцами? Будет ли при совершении вращательного движения одного пальца рисоваться окружность на экране? В зависимости от аппаратной и программной среды жест поворота может быть любым из этих жестов или полностью отличаться. Поэтому устройство передает данные в операционную систему о пользовательском вводе, а операционная система в свою очередь передает информацию в среду выполнения. Если среда выполнения работает в браузере, программное обеспечение браузера иногда интерпретирует жест или событие прикосновения и не передает данные о вводе в среду выполнения. Это поведение аналогично поведению «горячих клавиш»: вы пытаетесь использовать определенную комбинацию клавиш для выполнения действия в проигрывателе Flash Player, работающем в браузере, а вместо этого в браузере открывается меню.

Отдельные API-интерфейс и классы выдают информацию, если они не совместимы с определенной операционной системой. Здесь можно ознакомиться с отдельными элементами API-интерфейса, начиная с класса Multitouch: http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

Здесь приводятся некоторые общие описания жестов и прикосновений:
Панорамирование
Перемещайте палец слева направо или справа налево. В некоторых устройствах панорамирование выполняется двумя пальцами.

Вращать
Прикоснитесь двумя пальцами, затем перемещайте их по кругу (как если бы оба пальца перемещались по воображаемой окружности на поверхности). Точка поворота задана посередине между точками прикосновения двух пальцев.

Пролистывание
Быстро переместите три пальца слева направо, справа налево, сверху вниз или снизу вверх.

Масштабирование
Прикоснитесь двумя пальцами, затем раздвиньте их для увеличения масштаба или сдвиньте для уменьшения масштаба.

Удерживание и нажатие
Выполните перемещение или нажатие одним пальцем, затем коснитесь поверхности другим пальцем.

Для каждого устройства предусмотрена собственная документация по поддерживаемым жестам и выполнению каждого жеста в устройстве. Как правило, в зависимости от операционной системы пользователь не должен касаться другими пальцами устройства при выполнении жеста.

Если приложение не реагирует на события прикосновения или жесты, проверьте следующее:
  1. Существуют ли прослушиватели событий, подключенные к классу объектов, наследуемому от класса InteractiveObject? Только экземпляры InteractiveObject могут прослушивать события прикосновения или мыши.

  2. Выполняется ли тестирование приложения в среде выполнения Flash Professional CS5? Если да, попробуйте опубликовать и протестировать приложение, поскольку среда Flash Professional может препятствовать взаимодействию.

  3. Начните с простого и проверьте работающий код (следующий пример кода взят из записи API-интерфейса для 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); 
    }

    Нажмите на прямоугольник. Если этот пример работает, то известно, что среда поддерживает простое прикосновение. После этого можно попробовать выполнить более сложную обработку.

    Протестировать поддержку жестов сложнее. Определенное устройство или операционная система поддерживает любую комбинацию ввода с помощью жестов или ни одну из них.

    В следующем примере проверяется наличие поддержки для жеста увеличения.

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

    Выполните жест увеличения на устройстве и проверьте, появится ли в текстовом поле сообщение « Zoom is supported » (Увеличение поддерживается). Для рабочей области добавляется прослушиватель событий, чтобы жест можно было выполнить в любой части тестового приложения.

    В следующем примере проверяется наличие поддержки для жеста панорамирования.

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

    Выполните жест панорамирования на устройстве и проверьте, появится ли в текстовом поле сообщение « Pan is supported » (Панорамирование поддерживается). Для рабочей области добавляется прослушиватель событий, чтобы жест можно было выполнить в любой части тестового приложения.

    Для некоторых комбинаций устройства и операционной системы поддерживаются оба жеста, для других — только один из них, а для третьих — ни один. Для уверенности следует протестировать среду развертывания приложения.

Известные проблемы

С сенсорным вводом связаны следующие выявленные неполадки:
  1. Mobile Internet Explorer в операционной системе Windows Mobile автоматически масштабирует содержимое SWF-файла:

    Это поведение масштабирования Internet Explorer переопределяется путем добавления следующей страницы HTML, на которой размещен SWF-файл:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. В Windows 7 (и, возможно, других операционных системах) пользователь должен убирать инструмент указания (или пальцы) с экрана между жестами. Например, для поворота и масштабирования изображения необходимо выполнить следующее:
    • Выполнить жест поворота.

    • Убрать пальцы с экрана.

    • Снова коснуться пальцами экрана и выполнить жест масштабирования.

  3. В Windows 7 (и, возможно, в других ОС) жесты поворота и масштабирования могут не генерировать фазу обновления, если пользователь выполняет их слишком быстро.

  4. В ОС Windows 7 Starter Edition не поддерживается ввод Multitouch. См. форум AIR Labs Forum для получения сведений: http://forums.adobe.com/thread/579180?tstart=0

  5. Для ОС Mac OS 10.5.3 и более поздних версий значением Multitouch.supportsGestureEvents всегда является true , даже если отсутствует аппаратная поддержка жестов.