Flex4
Проблема такая.
Есть в приложении два BorderContainer. Разных размеров. Назовем их родительские.
Внутри каждого еще по одному BorderContainerу. Это дочерние контейнеры.
Задача. Поменять местами дочерние контейнеры у родителей.
Когда просто вызываем метод addElement, без всяких выкрутасов все отлично работает
Добавляем эфект Move3D для визуализации перемещения по осям X и Y после вызова addElement в родительских контейнерах ничего не отображается. И не возможно правильно выставить x и y для дочерних контейнеров. Просто никакой реакции. Без эффекта все отлично работает. В чем дело?
Такое ощущение что внутри родительских контейнеров площадь увеличилась и почему то центр сместился, поэтому мы не можем точно спозиционироваться.
Дело в том что на бэкграунде родительских контейнеров ровно по середине отображается индекс 0,1,2 Так вот эта надпись смещается почему-то

Код AS3:
//Все методы относятся к классу родительского контейнера на основе BorderContainer
//Метод для перемещения дочерних контейнеров.
public function MoveToMain(disp:MBVideo, disp0:MBVideo):void
{
this.Cur4MoveDisp = disp; // сохраняем ссылки для того чтобы, по завершении эффекта перемещения прицепить их к родителям
this.Cur4MoveDisp0 = disp0;
disp.x = disp.pFrame.x;
disp.y = disp.pFrame.y;
disp.pFrame.pApp.addElement(disp); // Добавляем дочерний контейнер на самый верхний уровень чтоб плыл поверху disp0.pFrame.pApp это ссылка на контейнер приложения
// подготавливаем эффект для первого контейнера
this.moveEffect.target = disp;
this.moveEffect.xFrom = disp.x;
this.moveEffect.yFrom = disp.y;
this.moveEffect.xBy = disp0.pFrame.x - disp.x;
this.moveEffect.yBy = disp0.pFrame.y - disp.y;
this.moveEffect.duration = 1000;
this.moveEffect.repeatCount = 1;
// подготавливаем эффект для второго контейнера
disp0.pFrame.pApp.addElement(disp0); // тоже добавляем на верхний уровень
this.moveEffect0.target = disp0;
this.moveEffect0.xFrom = disp0.x;
this.moveEffect0.yFrom = disp0.y;
this.moveEffect0.xBy = -(disp0.pFrame.x - disp.x);
this.moveEffect0.yBy = -(disp0.pFrame.y - disp.y);
this.moveEffect0.duration = 1000;
this.moveEffect0.repeatCount = 1;
this.moveEffect.play();
this.moveEffect0.play();
}
// События на завершение перемещения
protected function MoveEnd():void
{
var frmMain:MBFrame = this.pApp.arrFrames[0];
frmMain.DockDisplay(this.Cur4MoveDisp);
}
protected function MoveEnd0():void
{
this.DockDisplay(this.Cur4MoveDisp0);
}
// метод парковки дочернего контейнера
// тут устанавливаем новые размеры и другие атрибуты для дочерних контейнеров
public function DockDisplay(display:MBVideo):void
{
display.width = this.width;
display.height = this.height;
display.x = 0;
display.y = 0;
this.curVideo = display;
this.curVideo.pFrame = this;
this.curVideo.isInMainFrame = this.isMainFrame;
this.addElement(display);
display.ResizeDisplay();
if (this.isMainFrame)
this.curVideo.SetLayout4Main();
else
this.curVideo.SetLayout4NotMain();
}
// Причем если в методе MoveToMain
// просто сразу вызывать DockDisplay для обоих то все прекрасно работает
public function MoveToMain(disp:MBVideo, disp0:MBVideo):void
{
disp.pFrame.pApp.addElement(disp);
disp0.pFrame.pApp.addElement(disp0);
disp0.pFrame.DockDisplay(disp);
this.DockDisplay(disp0);
}
А после отработки эффекта
в одном родительском контейнере пусто, а другой отображает дочерний со смещением в два раза где-то.
Т.е. это значит в первом контейнере тоже есть дочерний элемент просто его не видно так как он за края выходит
Как получается, такое разрушительное действие на координаты x и y после отработки эфекта?
Добавлено через 8 часов 53 минуты
Проблема решается заменой эффекта Move3D на обычный Move.
В чем было дело пока не понял. Видимо Move3D как-то по другому с координатами обращается
Добавлено через 8 часов 54 минуты
Проблема решается заменой эффекта Move3D на обычный Move.
В чем было дело пока не понял. Видимо Move3D как-то по другому с координатами обращается