如何获取嵌套代理中目标代理Presentation对象的坐标?
如何获取嵌套代理中Presentation对象的正确坐标?
你遇到的问题核心是没搞清楚嵌套场景下的坐标系层级:
page.getX()获取的是page代理本身在主代理坐标系中的位置,如果返回0,要么是代理没被正确添加到主代理中,要么你调用时机不对(比如代理还没完成布局)。page.presentation.getX()返回的是该根Presentation在page代理内部坐标系的位置,这个值本来就是0——因为它是代理的根容器,所有子元素都是基于这个容器的(0,0)点布局的。
要拿到内部Presentation在主代理(全局)坐标系的正确位置,需要结合两层坐标计算:
- 先获取page代理在主代理中的全局坐标:
const proxyGlobalX = page.getX(); const proxyGlobalY = page.getY(); - 再获取目标Presentation在page代理内部的局部坐标(比如你说的矩形,假设它是
page.presentation的子元素):const rectLocalX = yourRectPresentation.getX(); const rectLocalY = yourRectPresentation.getY(); - 最终全局坐标就是两者相加:
const rectGlobalX = proxyGlobalX + rectLocalX; const rectGlobalY = proxyGlobalY + rectLocalY;
如果你的矩形就是page代理的根Presentation(page.presentation),那它的局部坐标永远是(0,0),此时它的全局坐标就等于page代理的全局坐标。如果这时候page.getX()返回0,你需要检查:
- 代理是否已经被正确添加到主代理的子列表中
- 是否在代理完成布局渲染后再调用坐标获取方法
- 有没有其他代码重置了代理的位置
结论:仅通过代理引用完全可以获取到内部Presentation的正确坐标,关键是要区分不同坐标系的层级关系,把代理的全局坐标和内部元素的局部坐标结合计算。
内容的提问来源于stack exchange,提问作者Jaco-Ben Vosloo
相关产品推荐
相关产品推荐

