检测全局坐标的变化

时间:2013-05-22 17:28:16

标签: actionscript-3 flex

问题

如何检测组件的全局x y坐标(来自组件内)的更改。通过全局坐标,我指的是相对于舞台的坐标,而不是容器。

检测MyComponent.x何时更改很容易,但在更改MyComponent.parent.x时却不那么容易。


实施例

在下面的代码中,#container保留MyComponent#container的坐标取决于currentState,但MyComponent的坐标与#container的坐标保持一致。

<s:states>
    <s:State name="state1" />
    <s:State name="state2" />
</s:states>

<s:Group id="container" x.state1="0" x.state2="35"
                        y.state1="0" y.state2="35">
    <local:MyComponent width="300" height="400" />
</s:Group>

在上面的代码中,如何检测MyComponent的位置(相对于阶段)何时发生了变化?

我需要从MyComponent中的代码执行此操作,在状态发生变化时简单地调用函数是不够的。


到目前为止,我已尝试收听updateCompletemoveresize等。但它不起作用。

我还考虑过听取enterStage或听取move所有家长的意见,我认为这些选项可能是资源密集型的,我希望有更好的方法。


原因

在实际代码中,我将StageWebView包裹在UIComponent中,当父级坐标发生变化时,我遇到了问题。我没办法听那个事件。

如果您以前使用过此课程,您将知道它无法添加到显示列表中,而是附加到舞台上。这使得它很难管理,我想将它包装起来,以便我可以直接在MXML中重用。

2 个答案:

答案 0 :(得分:0)

您可能会尝试覆盖该类中x,y的setter加上其完整的父级。这样你就不会听事件,但是你可以通过正常方式判断x或y是什么时候设置的。但是,如果您还想在正确或水平中心之类的东西自动移动时捕获它,这将无效。

答案 1 :(得分:0)

您可以使用MyComponentRef.transform.concatenatedMatrix来应用转换。矩阵的txty属性将满足您的目的。