2014-10-01 50 views
0

或者更準確地說,我希望能夠獲得控件的頂部到其子控件頂部之間的距離(並添加所有控件的高度成員上面的孩子會產生似是而非的結果!),但獲得絕對座標並比較它們的過程看起來真的很糟糕。Flex:獲得控件集合的高度

我用這個功能來計算的2個標籤頂部之間的高度:

 private static function GetRemainingHeight(oParent:Container, oChild:Container, 
          yParent:Number, yChild:Number):Number { 
      const ptParent:Point = oParent.localToGlobal(new Point(0, yParent)); 
      const ptChild:Point = oChild.localToGlobal(new Point(0, yChild)); 
      const nHeightOfEverythingAbove:Number = ptChild.y - ptParent.y; 
      trace(ptChild.y.toString() + '[' + yChild.toString() + '] - ' + 
      ptParent.y.toString() + '[' + yParent.toString() + '] = ' + nHeightOfEverythingAbove.toString() + ' > ' + oParent.height.toString()); 
      return nHeightOfEverythingAbove; 
     } 

注意oParent.y == yParentoChild.y == yChild,但我做了這樣的結合的原因。 結果我得到的是非常令人驚訝的:

822 [329] - 124 [0] = 698> 439

這是不可能的,因爲oChild頂部不會消失下面oParent。我發現唯一出乎意料的是ptChild.y。所有其他數字看起來相當健全。所以我假設我的錯誤在於減去兩個不可比的數字。

當然,如果任何人有一種計算兩點之間差異的方法,不涉及localToGlobal(),那也可以。

我正在使用3.5 SDK。

回答

0

我找到http://rjria.blogspot.ca/2008/05/localtoglobal-vs-contenttoglobal-in.html(包括評論)的部分答案。它會影響我是否應該使用localToGlobal()或contentToGlobal(),但它會填充Adobe文檔留下的空白,即通過提供函數new Point(0, 0)來獲得全局座標。最後,我用這個:

public static function GetRemainingHeight(oParent:DisplayObject, oChild:DisplayObject, 
       yParent:Number, yChild:Number):Number { 
     const ptParent:Point = oParent.localToGlobal(new Point(0, 0)); 
     const ptChild:Point = oChild.localToGlobal(new Point(0, 0)); 
     const nHeightOfEverythingAbove:Number = ptChild.y - ptParent.y; 
     return nHeightOfEverythingAbove; 
    } 

見問題對於看似不必要的參數,現在看起來他們真的有可能不相關的解釋。

但是,我並不需要像我想的那樣經常使用這個功能,而且我也不會非常高興,無論如何它的工作方式。我已經瞭解到,我已經完成了這個工作,所以不可能僅將這些參數設置爲功能Bindable,並且期望在對oChild進行更改時調用此函數。在一種情況下,我必須在updateComplete事件的處理程序中調用此函數。