Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Custom UIComponent + flash = проблемы с percentHeight и percentWidth (http://www.flasher.ru/forum/showthread.php?t=208277)

PainKiller 24.06.2014 14:50

Custom UIComponent + flash = проблемы с percentHeight и percentWidth
 
Вкратце обрисую суть проблемы. Есть проект сделанный в Flash CS6, с графикой, текстфилдом и присвоенным классом (в котором минимум кода), этот проект компилится в swc. swc подключаю к flex проекту и делаю на его основе UIComponent таким образом:

Код AS3:

package as3comps
{
        import flash.events.MouseEvent;
        import mx.core.UIComponent;
        import as3.FlashTextInputComp;
 
 
        public class FlexTextInput extends UIComponent
        {
 
                private var _input:FlashTextInputComp;
 
 
 
 
                public function FlexTextInput()
                {
                        super();
                        _input = new FlashTextInputComp();
                }
 
                override protected function createChildren():void
                {
                        //здесь создаем статические свойства вокуг динамических (маски, окантовки и т.д.)
                        addChild(_input);
                        super.createChildren();
                }
 
                override protected function measure():void
                {
                        this.minHeight = 40;
                        this.minWidth = 437;
                        super.measure();
                }
 
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                {
                        super.updateDisplayList(unscaledWidth, unscaledHeight);
 
                }
        }
}

где FlashTextInputComp - класс из флешевой swc. Все нормально и компонент можно использовать во flex, но я столкнулся с тем, что размеры компонента через mxml верстку изменять не получается, например такое присвоение длинны не работает:
Код AS3:

<as3comps:FlexTextInput id="input" width="100%" />

Чтение доков на тему жизненного цикла компонентов ситуацию не прояснило. Конечно буду копать сам, и отпишу если что найду, но интересует быстрое и легкое решение, не переделывая флешевый компонент.

Добавлено через 1 час 22 минуты
Уточню вопрос, это понятно что присвоение длинны и высоты компоненту происходит, - как правильно менять длину и высоту флешевого ребенка этого компонента?

Добавлено через 2 часа 2 минуты
И да, через as3 я добился нужного эффекта, но меня интересует именно правильный с точки зрения flex подход :-)

ShockWave512 25.06.2014 01:13

насколько помню, в updateDisplayList() и меняете размеры своего чайлда

PainKiller 25.06.2014 11:33

Насчет updateDisplayList() я рекомендаций в инете не встречал, тем более что туда передаются анскейлд параметры - это смущает, у меня получилось добиться нужного эффекта через setActualSize, но размер удается менять только через as3 код, через mxml процентные размеры не работают, поэтому и не уверен, что сделал правильно

alatar 26.06.2014 18:28

PainKiller, перенесите создание FlashTextInputComp из конструктора в createChildren(), он для этого и создавался.

Размеры FlashTextInputComp, как вам и сказал ShockWave512, меняйте в updateDisplayList.

Цитата:

Насчет updateDisplayList() я рекомендаций в инете не встречал
Каких рекомендаций? Это часть жизненного цикла.
1. createChildren — создаются дочерние компоненты.
2. measure — расчитываюся размеры по-умолчанию (measuredWdth, measuredHeight).
2. commitProperties — пересчитываются зависимые свойства.
3. updateDisplayList — обновляется отображение компонета, дочерние компоненты расставляются по своим местам и меняются их размеры в соответствии с расчитанными размерами компонента (unscaledWidth, unscaledHeight).
Цитата:

тем более что туда передаются анскейлд параметры - это смущает
А что бы вам дали размеры после масштабирования? Какая вам разница будет ли у компонента изменен scaleX / scaleY?

PainKiller 27.06.2014 11:31

Цитата:

Размеры FlashTextInputComp, как вам и сказал ShockWave512, меняйте в updateDisplayList.
Немного не понял как это сделать. Сделал вот так:
Код AS3:

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                {
                        //trace ("updateDisplayList:  unscaledWidth = " + unscaledWidth + " unscaledHeight = " + unscaledHeight);
                        _input.width = unscaledWidth;
                        _input.height = unscaledHeight;
                        if(_input.scaleX != _input.scaleY)
                        {
                                var max:Number = Math.max(_input.scaleX, _input.scaleY);
                                _input.scaleX = max;
                                _input.scaleY = max;
                        }
                        trace("_input.scaleX = " + _input.scaleX);
                        trace("_input.scaleY = " + _input.scaleY);
                        super.updateDisplayList(unscaledWidth, unscaledHeight);
 
                }

Через mxml размеры все равно не меняются, никакой разницы с переопределением setActualSize, я не увидел. И кстати попробовал большие разрешения, заметил глюки в позиционировании компонента в формах, хотя при переопределении setActualSize они тоже есть

alatar 27.06.2014 18:50

Значит где-то еще накосячили.

PainKiller 27.06.2014 19:14

с глюками вопрос решил, а вот с mxml так ничего сделать и не удалось, но это и не критично


Часовой пояс GMT +4, время: 18:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.