2011-02-28 65 views
0

我有一個自定義viewstack,當視圖更改時自動應用幻燈片放映/幻燈片放映效果。當視圖輕量級時,一切都會順利進行,但當下一個視圖需要大量渲染時,會變得非常激動。 下面是代碼的相關部分:Flex:避免幻燈片轉換怪癖的最佳方法

 _showEffect = new Parallel(); 
     _contentMove = new Move(); 
     _imageMove  = new Move(); 
     _showEffect.addChild(_contentMove); 
     _showEffect.addChild(_imageMove); 
     _showEffect.addEventListener(EffectEvent.EFFECT_END, effectEndHandler); 

我施加平行作用到每一個視圖的showEffect:

 vis.setStyle("showEffect", _showEffect); 

我定義取決於動畫的方向上移動時的屬性這裏向左(其中_views是在自定義組件我駐viewstack):

   _contentMove.xFrom = _views.width; 
       _contentMove.xTo = 0; 
       _contentMove.yFrom = 0; 
       _contentMove.yTo = 0; 

       _imageMove.xFrom = 0; 
       _imageMove.xTo = -_views.width; 
       _imageMove.yFrom = 0; 
       _imageMove.yTo = 0; 

_imageMove移動之前的觀點這是一個屏幕圖像設置爲在動畫開始時可見並在結束時隱藏。

我嘗試了一些黑客,如延長動畫的持續時間,當下一頁從未顯示過,但這不是非常通用的,因爲平滑過渡所需的持續時間根據呈現要求而變化。

在其他編程語言中是否沒有任何方式來強制下一頁的佈局/渲染過程仍處於視線之外?

感謝

回答

0

Viewstack有一個creationPolicy屬性。默認情況下,它被設置爲ContainerCreationPolicy.AUTO,這意味着視圖根據需要進行渲染。這就解釋了爲什麼在切換到視圖時看起來很陡峭。您可以將creationPolicy屬性設置爲ContainerCreationPolicy.ALL,並強制ViewStack在其加載之前預渲染所有視圖。

這將解決您的問題,但請注意,它會增加應用程序的整體初始化時間,因爲現在它將被迫提前渲染所有內容。

+0

嗨,其實我已經玩過creationPolicy,但它似乎沒有太大的幫助。在視圖的creationComplete事件上設置一個標誌顯示它是在轉換之前創建的。並且鎖定動畫直到標誌被設置爲true也沒有幫助。只有第一次顯示頁面後,轉換才能順利進行。有時,如果頁面根據其數據動態呈現(如:使用數據網格或中繼器查看),則甚至會存在怪癖。 – Sandy 2011-02-28 18:11:51

+0

(如果它仍然很緊急)你有'showEffect',當你的組件的'visibility'設置爲'true'時觸發。但是,當您創建組件第一次時,組件完全構建之前'visibility'設置爲'true'。將上部答案(creationPolicy)與'creationComplete'上的默認false'visibility'和處理程序結合起來,從而將可見性設置爲'true'。 – moropus 2011-08-24 13:52:38