2011-09-06 7 views
0

내 Flex 4.5 응용 프로그램에는 러시아와 우크라이나의 많은 사용자가 인터넷 연결이 불량하고 소켓 연결이 자주 중단되어 다시 연결해야합니다. Flex 응용 프로그램을 백엔드에 다시 연결하는 동안 배경 흐리게 및 비활성화

은 현재 내가 currentState를 설정 IOErrorEvent.IO_ERROR 및으로 Event.CLOSE 이벤트에 "오프라인"디스플레이 단지 1 개 구성 요소를 그 상태로 :

<mx:ProgressBar indeterminate="true" 
    horizontalCenter="0" verticalCenter="0" 
    label="Reconnecting..." labelPlacement="center" 
    includeIn="offline" /> 

그러나 이것은 가장 좋은 방법이 아니다 - 사용자는 갑자기 때문에 흰색 화면과 진행률 표시 줄로 표시되며 배경은 사라집니다.

(실제로는 응용 프로그램이 아니라 카드 게임이므로 사용자는 적어도 재 연결 중에 카드를 연구 할 수 있습니다.)

mx.controls.Alert과 비슷하지만 OK 단추가없고 소켓 연결이 복원 될 때 해제되는 것처럼 Flex에서 배경을 흐리게 처리하거나 비활성화하는 방법이 있다면 궁금합니다.

UPDATE : 크리스 제안하지만, 불확정의 ProgressBar 어떤 이유로 애니메이션되지 않는 나는 PopUpManager를 사용했습니다

. 어떻게 시작할 수 있습니까?

에 MyApp.mxml :

Loading.mxml
<?xml version="1.0" encoding="utf-8"?> 
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    width="700" height="525" 
    backgroundColor="#CCFFCC" 
    initialize="systemManager.stage.scaleMode=StageScaleMode.SHOW_ALL" 
    applicationComplete="init()"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.managers.PopUpManager; 
      import mx.controls.ProgressBar; 

      private function init():void { 
       var bar:Connecting = PopUpManager.createPopUp(this, Connecting, true) as Connecting; 
       PopUpManager.centerPopUp(bar);    
      } 

      private function fullScreen(event:MouseEvent):void { 
       stage.displayState = 
        stage.displayState == StageDisplayState.NORMAL ? 
        StageDisplayState.FULL_SCREEN : 
        StageDisplayState.NORMAL; 
      } 
     ]]> 
    </fx:Script> 

    <s:states> 
     <s:State name="normal" /> 
     <s:State name="connected" /> 
    </s:states> 

    <s:CheckBox right="10" bottom="10" 
     label="Full screen" 
     click="fullScreen(event)" /> 

</s:Application> 

:

<?xml version="1.0" encoding="utf-8"?> 
<mx:ProgressBar 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    indeterminate="true" fontWeight="normal" 
    label="Connecting..." labelPlacement="center"> 
</mx:ProgressBar> 

UPDATE 2 :

당신이 때 그룹

답변

0

에서의 ProgressBar를 포함시켜 것으로 해결 Alert를 사용하여 실제로 일어나고있는 것은 팝업 컴패니언 onent가 앱 상단에 표시됩니다. PopUpManager을 사용하면 사용자에게 작은 메시지 (캔버스를 사용하는 사용자 정의 구성 요소 일 수도 있음)를 표시하면서 배경을 흐리게 처리하여 동일한 효과를 얻을 수 있습니다.

2

연결이 끊어지면 응용 프로그램 (또는 흐리게 처리하려는 최상위 구성 요소)의 enabled 속성을 false으로 설정하고 연결이 다시 설정되면 true으로 다시 설정하십시오.

'Application'은 구성 요소의 'enabled'속성이 'false'로 설정된 경우 자동으로 currentState가되는 스킨 상태 disabled을 정의합니다.

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" > 

    <fx:Metadata>[HostComponent("spark.components.Application")]</fx:Metadata> 

    <s:states> 
     <s:State name="normal" /> 
     <s:State name="disabled" /> 
    </s:states> 

    <s:Group id="contentGroup" left="0" right="0" top="0" bottom="0" /> 

    <s:filters.disabled> 
     <s:BlurFilter /> 
    </s:filters.disabled> 

</s:Skin> 

이 만 '비활성화'상태에서 'BlurFilter를'를 포함합니다 : 이것은 당신이이 같은 스킨을 만들 수 있다는 것을 의미합니다. 'enabled'속성을 'false'로 설정하면 모든 사용자 상호 작용이 자동으로 차단됩니다.

+0

훌륭한 답변 주셔서 감사합니다. 투표를 해 주셨습니다. Chris에게 친환경 "수상"체크 표시를 해 놓았습니다. ProgressBar를 보여줘야하기 때문입니다. –

+2

그게 전부입니다. 왜 다른 최상위 구성 요소를 사용하여 동일한 작업을 수행 할 수 있다고 말했습니까? 이렇게하면 전체 애플리케이션을 비활성화하지 않고 원하는 부분 만 사용할 수 있습니다. 예를 들어 ProgressBar는 실제 게임이 포함 된 구성 요소 위에 활성화되어있을 수 있습니다. 이 방법의 장점은 앱의 어떤 부분을 사용 중지할지 결정할 수 있다는 것입니다 (예 :연결이 필요하지 않은 모든 요소는 여전히 액세스 할 수 있습니다). – RIAstar