Какое событие использовать для рисования сетки внутри компонента Flex UI - PullRequest
1 голос
/ 11 апреля 2011

Мне нужно обеспечить функциональность Snap To Grid внутри BorderContainer.Вся функциональность выполнена, но я застрял с одной проблемой, которая рисует сетку.

  1. Пробовал с использованием события Creation_Complete, работает нормально, но как только дочерний элемент добавлен, сетка исчезает.

  2. Переопределение updateDisplayList - пока это был лучший вариант (все работает нормально), но проблема заключается в том, когда я перемещаю (или, скорее, перемещаю) элемент управления внутри (я использую ObjectHandlesбиблиотека) вызывается метод updateDisplayList, который перерисовывает сетку -> делает процесс перемещения ОЧЕНЬ медленным.

Вот как я заполняю сетку.

numRows = Math.ceil(this.unscaledHeight/gridSize);
numCols = Math.ceil(this.unscaledWidth/gridSize);

this.graphics.beginFill(0x000000, 1.0);

for (var i:int= 0; i < numRows; i++)
{               
    for (var j:int = 0; j < numCols; j++)
    {       

        this.graphics.drawCircle(j * gridSize, i * gridSize, 1);
    }
}

this.graphics.endFill();

Я хочу нарисовать ее только один раз, и рисовать только при изменении размера контейнера.Есть ли событие, которое поможет мне достичь этого?Или есть эффективный метод, который поможет мне нарисовать сетку?Любые комментарии и предложения приветствуются.Большое спасибо заранее:)

1 Ответ

2 голосов
/ 11 апреля 2011

updateDisplayList() - это метод, который имеет unscaledWidth и unscaledHeight в качестве параметров.

Таким образом, вы можете избежать ненужной перерисовки следующим образом:

private var previousUnscaledWidth:Number;
private var previousUnscaledHeight:Number;

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    …
    if (unscaledWidth != previousUnscaledWidth || unscaledHeight != previousUnscaledHeight)
    {
        // Your drawing routine here

        previousUnscaledWidth = unscaledWidth;
        previousUnscaledHeight = unscaledHeight;
    }
}

Вы можете поместить этокод внутри вашего пользовательского компонента ActionScript, который имеет UIComponent в качестве базового класса.И поместите эту сетку в BorderContainer:

<s:BorderContainer>
    <MyGrig left="0" right="0" top="0" bottom="0" />
    <!-- Another container's content here -->
</s:BorderContainer>
...