Какое событие использовать для рисования сетки внутри компонента Flex UI

Мне нужно обеспечить функциональность 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 ответ

Решение

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>
Другие вопросы по тегам