본문 바로가기

Blog/Flex

[AIR] renderMode와 Stage~ 계열의 컴포넌트 동작

Flex로 모바일 앱을 개발하면서 StageWebView, StageVideo, StageText등을 사용하게되는데
이때 Application 설정파일의 renderMode에 따라 여러가지로 해결하기가 난해한 문제들이 생겻다.
일단은 AIR SDK3.7 상황에서 어느정도 타협점을 찾은것 같아 글을 남긴다.

맨처음 renderMode를 cpu로 설정 한경우 다음 증상이 나타났다.

동영상 재생시 소리만 나오고 화면은 검은화면인 채로 재생되지 않았다.

이것은 화면이 재생되지 않은것이 아니라 StageVide가 Application 밑에 있음으로 인해 player 배경으로 설정해 놓은 검은색 DisplayObject에 가려져 있었던것 같다. 매번 같은 현상이 있었으며 두번째 재생할때는 정상적으로 화면이 표시되는듯 하다가도 Device 회전등에 동작에따라 화면 끊김 현상이 좀 심하게 나타났다.

Application.xml에서 <renderMode>direct</renderMode> 로 수정함으로써 해결하였고
더불어 런타임에 Player가 처음 재생될때 화면이 깜빡이는 현상도 함께 사라졌다.


renderMode를 direct로 설정하자 다음과 같은 현상으로 다른 부분 동작이 원활하지 않게 되었다. 대부분 renderMode가 cpu인 경우 잘 동작하던 것들이였다. 

<softKeyboardBehavior>pan</softKeyboardBehavior> 설정에 의한 동작이 정상적으로 이루어지지 않았다.

텍스트 입력박스에 포커싱을 받아 SoftKeyBoard가 올라와도 키보드에 입력박스가 가리는걸 방지 하기 위한 pan 기능이 제대로 동작하지 않았다 자료를 찾아보니 다음과 같은 문구를 발견하였다.

oft keyboard에 대하여 텍스트 박스의 위치가 정삭적으로 움직이도록 하려면 cpu, pan 모드로 고정되어야 합니다.그렇지 않은 경우에는 기능을 직접 구현해 주어야 합니다.

참고 : http://help.adobe.com/ko_KR/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffd.html");
참고 : http://help.adobe.com/ko_KR/air/build/WSfffb011ac560372f2fea1812938a6e463-8000.html");

GPU 렌더링 모드에서 가상 키보드가 열릴 때 텍스트 필드가 보이는 위치로 제대로 이동하지 않습니다. 사용자가 텍스트를 입력할 때 텍스트 필드가 보이도록 하려면 스테이지의 softKeyboardRect 속성과 소프트 키보드 이벤트를 사용하여 텍스트 필드를 눈에 보이는 영역으로 이동하십시오.

그래서 focus in, out 이벤트를 이용해 직접 위치를 이동 시켜 주어야 했다. 참고로 포커스가 바뀔때 텍스트박스, 텍스트 필드인지 타입을 조사하여 위치를 이동시켜주었다.

SNS 기능을 위해 StageWebView를 사용하는데 인증을 위해 트위터 페이지를 표시할때 렌더링에 이상이 발생했다.

동영상 재생시와 비슷하게 화면이 배경색으로 덮여지는 현상이 발생했다.
페이스북로그인 화면에서는 괜찮은데 트위터 로그인 화면에서 발생했다. 역시 도움말에서 해당 정보를 찾을 수 있었다.

  <manifestAdditions><![CDATA[
   <manifest android:installLocation="auto">
   
       <!--StageWebView 객체에서 다른 플러그인 활성화하기 위해 필요(특히 트위터 페이지 표시할때)-->
       <application android:hardwareAccelerated="true"/>
   ......
참고) http://help.adobe.com/ko_KR/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffc.html

 

겨우 찾아서 해결했다. App 개발이 마치 살얼음판을 걷는 기분이다.