在swgis的flex應用框架內對于實時監控和回放界面使用stackview進行布局
1 <mx:ViewStack id="viewstack1" width="100%" height="100%" creationPolicy="all">
2 <s:NavigatorContent label="實時監控" width="100%" height="100%" id="GisRealView">
3 <s:layout>
4 <s:VerticalLayout/>
5 </s:layout>
6 <ns1:PaneGisRealView width="100%" height="100%">
7 <ns1:layout>
8 <s:VerticalLayout/>
9 </ns1:layout>
10 </ns1:PaneGisRealView>
11 </s:NavigatorContent>
12 <s:NavigatorContent label="歷史回放" width="100%" height="100%" id="GisReplayView">
13 <s:layout>
14 <s:VerticalLayout/>
15 </s:layout>
16 <ns1:PaneGisReplayView height="100%" width="100%"/>
17 </s:NavigatorContent>
18
19 </mx:ViewStack>
stackview我通常習慣的設置為
creationPolicy="all" ,因為這樣的話stackview在初始化的時候將內部的所有 NavigatorContent都將進行初始化實例,如果不設置
creationPolicy的話,flex將在用戶切換NavigatorConent時創建實例(lazy create).
這本是個簡單而且方便的設置行為,沒想到在第一個view1的地圖內顯示feature位置都是okay的,但是切換到第二個view2的地圖顯示feature,發現feature對應的位置在x方向上都做了偏移。
view1.map顯示linestring feature:

view2.map顯示的linestring feature:

相同的linestring在兩個map上顯示居然位置產生了偏移,這個問題困擾了一整天和一個晚上,苦思不得其解,采用排斥法,切換view1,view2在stackview中排布次序,居然view2顯示就正常了。
然后就聯想到了createPolicy這個屬性了,一切還原,去除這個屬性(默認:lazy create),跑一下居然好了!
奇怪奇怪,沒時間具體去研究這個屬性在flex里面的實現機制了,就這樣吧!