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

使用tlf为一系列文本设置文本格式的快速方法

  •  0
  • wezzy  · 技术社区  · 16 年前

    我必须为纯文本中的某些标记设置文本格式。我试图使用文本布局框架来提高操作的速度,但是我发现tlf比旧的settextformat()慢得多(在我的测试中是10倍)。对于每个令牌,我调用此函数:

    public function setTextFormat(format:TextLayoutFormat, begin:int, end:int):void{
    
                var selection:SelectionState = new SelectionState(this._textFlow, begin, end, this._normalFormat);
                IEditManager(_textFlow.interactionManager).applyLeafFormat(format, selection);
    
            }
    

    有没有更快更聪明的方法来做这个手术?

    谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   ZackBeNimble    16 年前

    这些tlf更新的大部分处理时间是重新计算和更新显示。特定格式与文本模型部分的关联要少得多。不幸的是,applyleafformat()调用同时执行格式关联和重新显示操作。你得把他们分开。

    您可以将令牌拆分为单独的flowElement对象(最有可能是spanElement),这些对象可以用一个“id”属性唯一标识,而不是只根据其绝对位置来处理令牌。一旦标记位于单独的元素中,就可以直接遍历其中的所有元素,更改格式特征,并在最后强制进行显示更新。

    for each (var id:String in ids) {
        var element:SpanElement = _textFlow.getElementByID(id) as SpanElement;
        if (element) {
            element.format = getAppropriateFormatForElement(element);
        }
    }
    _textFlow.flowComposer.updateAllControllers();
    

    另外,将令牌拆分为元素也为在元素本身中存储令牌分类打开了大门,使您不必维护单独的分类映射结构。

    推荐文章