Показать сообщение отдельно
Старый 21.08.2010, 22:50
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 28  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Сообщение от 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 - я сам до конца не вкурил.

Альтернатива - повысить сложность клиенсткого кода и вызывать методы, пересчитывающие размеры и положения детей вручную, ну и соответственно определять когда это необходимо тоже вручную.
Зато компоненты писать проще будет.


Последний раз редактировалось expl; 21.08.2010 в 23:07.