문제 해결
Flash Player 10.1 이상, Adobe AIR 2 이상
터치 입력에 대한 하드웨어 및 소프트웨어 지원은 급속도로 변화하고 있습니다. 이 참조 설명에서는 다중 터치를 지원하는 운영 체제 및 소프트웨어 조합을 갖춘 모든 장치에 대한 목록은 제공하지 않습니다. 그러나 응용 프로그램이 다중 터치를 지원하는 장치에 배포되어 있는지 확인 API를 통해 확인하는 지침과 ActionScript 코드의 문제를 해결하는 팁을 제공합니다.
Flash 런타임은 장치, 운영 체제 또는 포함 소프트웨어(예: 브라우저)가 런타임에 전달하는 터치 이벤트에 응답합니다. 소프트웨어 환경에 대한 이러한 의존성 때문에 다중 터치 호환성을 문서화하기가 어렵습니다. 일부 장치의 경우에는 동작 또는 터치 움직임을 다르게 해석합니다. 회전이 두 손가락을 동시에 회전하는 것으로 정의될 수도 있고 한 손가락으로 화면에 원을 그리는 것으로 정의될 수도 있습니다. 하드웨어 및 소프트웨어 환경에 따라 회전 동작이 둘 중 하나로 정의될 수도 있고 완전히 다르게 정의될 수도 있습니다. 즉, 장치에서 운영 체제에 사용자 입력을 알리고 운영 체제에서 해당 정보를 런타임에 전달합니다. 런타임이 브라우저 내에 있는 경우 브라우저 소프트웨어에서 동작 또는 터치 이벤트를 해석한 후 해당 입력을 런타임에 전달하지 않는 경우가 있습니다. 이러한 비헤이비어는 단축키 비헤이비어와 유사합니다. 브라우저 내에서 Flash Player가 특정 작업을 수행하도록 특정 키 조합을 사용하지만 브라우저에서 여전히 메뉴를 열 수 있습니다.
개별 API와 클래스는 특정 운영 체제와 호환되지 않을 수도 있습니다. 다음 페이지에서는 Multitouch 클래스부터 개별 API 항목을 살펴볼 수 있습니다. http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html.
일반적인 동작 및 터치 설명은 다음과 같습니다.
- 이동
- 손가락을 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽 방향으로 움직입니다. 일부 장치에서는 이동을 위해 두 손가락을 사용해야 합니다.
- 회전
- 두 손가락으로 누른 다음 표면에서 가상 원을 동시에 추적하듯이 원 둘레를 따라 함께 움직입니다. 두 손가락 터치 지점 사이의 중간점에 pivot 점이 설정됩니다.
- 스와이프
- 세 손가락을 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽 방향이나 위쪽에서 아래쪽 또는 아래쪽에서 위쪽 방향으로 신속하게 움직입니다.
- 확대/축소
- 두 손가락으로 누른 다음 확대하려면 손가락 사이를 멀리 벌리고 축소하려면 손가락 사이를 가깝게 모읍니다.
- 누르고 두드리기
- 한 손가락으로 움직이거나 누른 다음 다른 손가락으로 표면을 두드립니다.
각 장치에는 장치가 지원하는 동작과 장치에서 각 동작을 수행하는 방법에 대한 자체 설명서가 있습니다. 운영 체제에 따라 달라지지만 일반적으로 사용자는 각 동작 사이에 장치에서 모든 손가락을 완전히 떼야 합니다.
응용 프로그램이 터치 이벤트 또는 동작에 응답하지 않는 경우 다음을 테스트합니다.
InteractiveObject 클래스에서 상속된 객체 클래스에 연결된 터치 또는 동작 이벤트에 대한 이벤트 리스너가 있습니까? InteractiveObjects 인스턴스만 터치 및 동작 이벤트를 수신할 수 있습니다.
응용 프로그램을 Flash Professional CS5 내에서 테스트하고 있습니까? 이 경우 Flash Professional에서 상호 작용을 차단할 수 있으므로 응용 프로그램을 제작하여 테스트해 봅니다.
먼저 단순하게 시작해서 제대로 작동하는지 확인합니다. 다음 코드 예제는 Multitouch.inputMode에 대한 API 항목에서 가져온 것입니다.
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";
}
장치에서 확대/축소 동작을 수행하고 텍스트 필드가 확대/축소가 지원됩니다라는 메시지로 채워지는지 확인합니다. 스테이지에 이벤트 리스너가 추가되어 테스트 응용 프로그램의 모든 부분에서 동작을 수행할 수 있습니다.
다음은 간단한 패닝 동작 테스트입니다.
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";
}
장치에서 패닝 동작을 수행하고 텍스트 필드가 패닝이 지원됩니다라는 메시지로 채워지는지 확인합니다. 스테이지에 이벤트 리스너가 추가되어 테스트 응용 프로그램의 모든 부분에서 동작을 수행할 수 있습니다.
두 동작을 모두 지원하는 운영 체제 및 장치 조합도 있고 일부만 지원하는 운영 체제 및 장치 조합도 있으며 아무것도 지원하지 않는 운영 체제 및 장치 조합도 있습니다. 확실하게 하기 위해 응용 프로그램의 배포 환경을 테스트합니다.
알려진 문제
다음은 터치 입력과 관련된 알려진 문제입니다.
Windows Mobile 운영 체제의 Mobile Internet Explorer는 SWF 파일 내용을 자동으로 확대/축소합니다.
이러한 Internet Explorer 확대/축소 비헤이비어는 SWF 파일을 호스팅하는 HTML 페이지에 다음을 추가하면 재정의됩니다.
<head>
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0">
</head>
Windows 7(및 일부 다른 운영 체제)에서 사용자는 각 동작 사이에 포인팅 장치(또는 손가락)를 화면에서 완전히 떼어야 합니다. 예를 들어 이미지를 회전 및 확대/축소하려면 다음과 같이 합니다.
Windows 7(및 기타 운영 체제)에서는 사용자가 동작을 매우 빨리 수행하는 경우 회전 및 확대/축소 동작으로 "업데이트" 단계가 생성되지 않을 수도 있습니다.
Windows 7 Starter Edition은 다중 터치를 지원하지 않습니다. 자세한 내용은 AIR Labs Forum(http://forums.adobe.com/thread/579180?tstart=0)을 참조하십시오.
Mac OS 10.5.3 이상에서는 하드웨어가 동작 이벤트를 지원하지 않는 경우에도 Multitouch.supportsGestureEvents 값이 항상 true입니다.