2013-12-10 538 views
0

我有一個skinnable容器縮放到0.5在兩個軸即scaleX = 0.5和scaleY = 0.5,如flex伸縮如果我縮放容器然後相應的子元素也得到縮放,但我需要防止其中一個該容器的兒童不能縮小。我試過這樣的事情如何防止Flex中特定子元素的縮放?

public static function preventScaleForComponent(target:UIComponent):void 
    { 
     if(!target) 
      return; 

     var parent:DisplayObjectContainer = target.owner; 
     if(parent) 
     { 
      trace("Target ScaleX :: "+target.scaleX+"Target ScaleY :: "+target.scaleY); 
      trace("Parent ScaleX :: "+parent.scaleX+"Parent ScaleY :: "+parent.scaleY); 

      target.scaleX = 1 + parent.scaleX; 
      target.scaleY = 1 + parent.scaleY; 
     } 
    } 

但我不知道這是正確的方式還是我們可以通過任何其他方式來做。有了這個,如果我的父容器縮放到0.5,那麼子縮放值將爲1.5,因此它看起來與沒有縮放的情況下看起來一樣。

回答

2

我認爲你是在正確的軌道上,但你的總和是錯誤的,得到一個子組件保留其原始大小:

target.scaleX = 1/parent.scaleX; 

這樣,如果父母規模爲2(兩倍於正常大小)目標/孩子的比例將爲0.5(原始尺寸的一半),並在其父母的背景下,其原始大小。

請記住,縮放是一個乘數適用於絕對尺寸(寬度/高度),而不是測量本身 - 當您將父項加倍時,您必須將子項減半,反之亦然,而不是簡單地添加數字從一個到另一個等

希望這會有所幫助!

+0

我接受這個,但我有一個更多的懷疑如果我的父容器縮小到0.5,那麼目標規模將是2.0,所以它可能看起來太大了嗎? –

+0

不,如果其父項已縮放爲0.5,則父項及其中的所有項都將顯示爲其原始大小的一半。將原始尺寸視爲您想要的尺寸,您需要將兒童的比例翻倍(至:2)以抵消父母的減半。嘗試一下,當你看到它在行動時可能會更清楚 – MickMalone1983

+0

是的,它按預期工作... –