Какое событие использовать для рисования сетки внутри компонента Flex UI
Мне нужно обеспечить функциональность Snap To Grid внутри BorderContainer. Все функции сделаны, но я застрял с одной проблемой, которая заключается в рисовании сетки.
Пробовал с помощью события Creation_Complete, работает нормально, но как только дочерний элемент добавляется, сетка исчезает.
Переопределить 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>