Как анимировать свойство пользовательского графического компонента - PullRequest
0 голосов
/ 09 февраля 2012

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

public class Arc extends FilledElement
{
    private var _endAngle:Number = 0;

    public function Arc()
    {
    }

    public function get endAngle():Number
    {
        return _endAngle;
    }

    public function set endAngle(value:Number):void
    {
        if (_endAngle == value)
            return;

        _endAngle = value;
        invalidateDisplayList();
    }

    // left out the rendering logic, for clarity
}

Работает отлично и пока неплохо. Это код, который отображает сектор:

<org:Arc id="arc"
     endAngle="135">
    <org:fill>
        <s:SolidColor color="#FFFF00" />
    </org:fill>
</org:Arc>

Однако я хочу анимировать свойство endAngle. Это код MXML, который стремится достичь этого:

<s:Animate id="effect"
       duration="2000"
       target="arc">
    <s:SimpleMotionPath property="endAngle"
            valueFrom="90"
            valueTo="180" />
</s:Animate>

Проблема тогда, когда я играю эффект, я получаю эту ошибку: Ошибка: свойство endAngle не является свойством или стилем дуги объекта: Ошибка типа: Ошибка # 1006: значение не является функцией.

Кто-нибудь еще сталкивался с этой проблемой, или еще лучше, кто-нибудь знает, что я сделал не так и как решить эту проблему?

Спасибо.

1 Ответ

0 голосов
/ 09 февраля 2012

Свойство Animate#target не оценивает строковые значения для идентификаторов объектов. Вместо этого вам нужно привязать целевой элемент (или он попытается найти свойство endAngle в строке "arc", которое выдаст полученную ошибку):

<s:Animate id="effect" duration="2000" target="{arc}">
    <s:SimpleMotionPath property="endAngle" valueFrom="90" valueTo="180" />
</s:Animate>

Обратите внимание, что единственная разница между вашей версией и моей - это фигурные скобки {}

...