代码之家  ›  专栏  ›  技术社区  ›  Drenai

有许多ui组件的flex画布,如果其中一个移动了,其他的是否重新绘制/重新处理?

  •  1
  • Drenai  · 技术社区  · 14 年前

    我有一个名为主机的画布,其中有许多uicomponents是儿童,有时多达1000或3000个项目。目前这还可以,因为它们不是交互式的。

    但是,我在画布上添加了一个“标记线”(一个具有彩色背景的1像素宽的UI组件),它跟随鼠标的移动。 当这个uicomponent被添加到主机画布并移动时,一切都将变慢为爬行。 也就是说,要移动ui组件需要很长时间。

    你认为这可能是什么原因造成的?或者如何避免?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Robusto    14 年前

    每次移动鼠标,都可能导致 measure updateDisplayList 每种方法 UIComponent 将被呼叫。因此,您可能导致这些数千个组件与它们的邻居重新协商它们的位置和维度。

    如果看不到您的代码,我就无法非常具体地推荐解决方案,但您可以尝试将 Canvas 在画布上有一个透明的背景,它容纳了数千个组件,匹配了它的尺寸和位置,并使用它来移动标记线。

        2
  •  0
  •   JeffryHouser    14 年前

    我假设你有1000件物品,一次只有一小部分在屏幕上?

    如果您有那么多组件,那么应该会减慢速度。我建议使用基于列表的类。因此,只渲染屏幕上的项目,内存中不会有很多组件挂起。