Цитата:
Сообщение от Psycho Tiger
Только вот при движении детей ширина и высота "контента" может меняться... Не вешать же на ENTER_FRAME проверку. Какие есть идеи?)
|
А при изменении ширины контента может понадобиться перерасположить детей
Перегружать set x и set y и вызывать внутри них что-то типа:

Код AS3:
var container:IMyContainerBase = parent as MyContainerBase;
if (container != null)
{
container.invalidateByChild();
}
а в контейнере вызывать тяжолую функцию validate(), только если его девалидировали перед отрисовкой следующего кадра единожды

Код AS3:
protected function validate()
{
if (_isValid)
{
return;
}
_isValid = true;
// Погнали пересчитывать свои размеры и перерасполагать детей
}
И можно еще вызывать при спрашивании размеров, если эта функция размеры контейнера пересчитывает(не дожидаясь начала перерисовки кадра):

Код AS3:
public function get width():void
{
if (!_isValid)
{
validate();
}
return _width;// это значение уже правильно пересчитано методом validate()
}
Можно событиями - но дороже по ресурсам.
И ломать голову как сделать циклы валидации - инвалидации, чтобы оно не зациклилось
Подсматривать как это сделано - во флекс и aswing - я сам до конца не вкурил.
Альтернатива - повысить сложность клиенсткого кода и вызывать методы, пересчитывающие размеры и положения детей вручную, ну и соответственно определять когда это необходимо тоже вручную.
Зато компоненты писать проще будет.