一个在SOUI中加速自适应大小的控件更新的小技巧

在SOUI中的控件有指定大小和自适应大小两类控件。

指定大小的控件,在控件内容更新时不需要重新布局,而自适应大小的控件在内容变化后会导致父窗口重新布局。

最近有网友发现在高速批量更新一个窗口的自适应控件(如50次/S的速度批量更新30个文件控件)时,SOUI的性能很低。

跟踪发现导致这个问题的关键在于在一次刷新过程中,每更新一个控件就需要执行一次重新布局,显而易见,这种情况下效率是非常低的。

解决这个问题的方法有两种:

一个简单的方法就是将自适应大小的文本控件改成固定大小的文本控件,如此,在定时刷新时不需要执行重新布局。

上述方法有个局限就是必须在设计时知道控件的期望尺寸,对于那些确实需要自适应大小的控件布局上并不适用。

为了解决这个问题,SOUI新内核为SWindow增加了两个方法:

    void SWindow::LockLayout()

    {

        m_bLayoutLocked = TRUE;

    }



    void SWindow::UnlockLayout()

    {

        m_bLayoutLocked = FALSE;

        UpdateChildrenPosition();

    }

顾名思义,LockLayout和UnlockLayout这两个方法布局锁定及解锁。

如此一来,在需要批量更新自适应大小的子窗口时,只需要锁定父窗口的布局就不会重复执行窗口布局了。

注:这两个方法是2015.4.27新增加的方法。

 

你可能感兴趣的:(自适应)