Я пытаюсь подключить некоторый из моего класса actionscript, унаследованный от Sprite, к моему приложению Flex, подключив его к UIComponent, а затем добавьте UIComponent в панель. Однако размер моего класса Sprite больше, чем панель. Поэтому я пытаюсь изменить его размер с помощью свойства DisplayObject.scale, но мне нужно знать размер моего контейнера. Поскольку я пытаюсь сделать свой код повторно используемым, я полагаю, что я должен позволить классу Sprite обрабатывать размер, получая его через его родительское свойство (скажем, я могу изменить его размер с помощью набораFlex: как изменить размер DisplayObject для панели в приложении Flex
this.scaleX = this.parent. Ширина/this.width или что-то вроде этого)
Однако, родители моего Sprite класса, который является UIComponent, имеет ширину/высоту 0. Итак, мой вопрос: 1) есть ли лучший способ изменить размер Класс DisplayObject подходит для своего контейнера при прикреплении к объекту Flex? 2) Если вы знаете, почему мой размер UIComponent остается 0, а мой DisplayObject по-прежнему отображается в полном размере?
Вот мой код, с помощью Flash Builder 4:
private var loader:Loader = new Loader(); private function testLoader():void { var urlRequest:URLRequest = new URLRequest("http://localhost/welcome.png"); loader.load(urlRequest); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderLoadComplete); } private function onLoaderLoadComplete(e:Event):void { loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoaderLoadComplete); var ui : UIComponent = new UIComponent(); ui.addChild(loader); panelTest.addElement(ui); trace("ui.width = " + ui.width); trace("ui.height = " + ui.height); trace("loader.width = " + loader.width); trace("loader.height = " + loader.height); trace("panelTest.width = " + panelTest.width); trace("panelTest.height = " + panelTest.height); }
И это результат при запуске:
ui.width = 0 ui.height = 0 loader.width = 571 loader.height = 411 panelTest.width = 480 panelTest.height = 320
Я изменил код для отслеживания после того, как пользовательский интерфейс был добавлен к стадиям, как это: частная функция onLoaderLoadComplete (е: Event): недействительный { loader.contentLoaderInfo.removeEventListener (Event.COMPLETE, onLoaderLoadComplete); \t \t \t ui.addChild (loader); ui.addEventListener (событие.ADDED_TO_STAGE, onUILoadComplete); panelTest.addElement (ui); } – ohm
приватная функция onUILoadComplete (e: Event): void { ui.removeEventListener (событие.ADDED_TO_STAGE, onUILoadComplete); след ("ui.width =" + ui.width); След ("ui.height =" + ui.height); след ("loader.width =" + loader.width); След ("loader.height =" + loader.height); след ("panelTest.width =" + panelTest.width); след ("panelTest.height =" + panelTest.высота); } Результат все тот же – ohm