2010-07-19 4 views
0

FLEX: dialog not display immediately과 비슷한 문제가 있습니다. 코드는 다음과 같습니다 어린이를 즉시 Flex에 추가 3

private function saveBitmap(event:ContextMenuEvent):void 
{ 
    loadingScreen.visible = true; 
    loadingScreen.appLoadingText.text = "Preparing bitmap..."; 
    addChild(loadingScreen); 

    validateNow(); 

    var bmpd:BitmapData = new BitmapData(canv.width, canv.height); 
    bmpd.draw(canv); 

    var fr:FileReference = new FileReference(); 
    fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, removeLoadingScreen); 
    fr.addEventListener(Event.CANCEL, removeLoadingScreen); 
    var png:PNGEncoder = new PNGEncoder(); 
    var iba:ByteArray = png.encode(bmpd); 
    fr.save(iba, "export.png"); 
} 

는 기본적으로 bmpd.draw 및/또는 png.encode 개 느린, 그래서 나는 표시에 좋은 "우리가 준비하는 동안 유지하시기 바랍니다 PNG"대화를하고 싶습니다. FileReference 때문에 callLater()를 사용할 수 없습니다.

방금 ​​측정을 위해 fr.save() 호출에서 저장 대화 상자가 표시되는 것과 동시에 로딩 화면이 나타납니다.

아이디어가 있으십니까?

건배!

답변

0

이 기능에서 자녀를 추가하고 있습니다. loadingScreen에 다른 작업 (예 : 크기 조정)을 수행하고 있습니까? 또는 그것을 배치? 가장 일반적으로이 작업은 updateDisplayList()에서 수행됩니다. 어떤 용기를 사용하고 있습니까?

두 자녀의 Z 순서가 맞습니까? swapChildren 메서드를 사용하여 자식을 바꿀 수 있습니다

+0

loadingScreen은 XML의 너비와 높이에 100 % 자동으로 크기가 지정되므로 validateNow()를 호출하면이 작업이 완료되기를 바랍니다. 이전에이 객체 (Canvas의 하위 클래스)에 loadingCanvas를 유지하고 가시성을 튕겨 보았지만 여전히 나타나지 않았습니다. loadingScreen이 결국 나타나지만 PNGEncoder가 끝날 때까지 z 순서가 정확하다고 가정합니다. – Andrew

+0

XML 또는 MXML을 의미 했습니까? MXML로 구성 요소를 만드는 경우 addChild() 메서드를 사용하면 안됩니다. Flex 컴파일러는 MXML을 ActionScript로 바꾸는 마법을 사용하기 때문에 모든 하위 항목을 해당 컨테이너에 추가하는 작업이 포함됩니다. validateNow()는 updateDisplayList()를 강제 실행해야합니다. 하지만 컨테이너에 자동으로 로딩 화면이 추가되어 아이들이 자동으로 크기를 조정하고 위치를 잡아 줍니까? 더 많은 코드를 공유해야한다고 생각합니다. – JeffryHouser

+0

나는 MXML을 의미했다, 미안. 얼마나 많은 코드가 필요할 지 확신 할 수 없으므로 다음 코드를 모두 사용하십시오. http://pubmap.svn.sourceforge.net/viewvc/pubmap/trunk/pubmap/ 코드를 추가해야합니다. 위는 viewport/common.as에 있고 로딩 화면은 뷰포트/LoadingScreen.mxml입니다. 지금까지 도움을 주셔서 감사합니다. – Andrew

관련 문제